jquery - uncaught - unexpected token que significa
error de sintaxis: token inesperado< (15)
Al publicar a través de ajax, siempre es una buena idea enviar primero normalmente para asegurarse de que el archivo que se llama siempre devuelva datos válidos (json) y no haya errores con las etiquetas html
u otras.
<form action="path/to/file.php" id="ajaxformx">
Al agregar x al valor de id, jquery no lo procesará.
Una vez que esté seguro de que todo está bien, elimine la x
de id="ajaxform"
y vacíe el valor del atributo de action
Así es como clasifiqué el mismo error hace unos minutos :)
He intentado muchas cosas y no hay forma, siempre aparece este error intenté usar solo una opción para ver si se pasaba, cambié la llamada de jquery, pero no.
Miré en varios lugares en Internet sobre este error, pero no pude resolver ni comprender por qué está sucediendo. En mi pc, usar EasyPHP funciona perfectamente, pero cuando lo pongo en línea no funciona.
Error de sintaxis: token inesperado <
Aquí está mi código:
$(function(){
$(''#salvar'').click(function(){
var key = ''salvar'';
var title = $(''#title'').val();
var opcao1 = $(''#opcao1'').val();
var opcao2 = $(''#opcao2'').val();
var opcao3 = $(''#opcao3'').val();
var opcao4 = $(''#opcao4'').val();
var opcao5 = $(''#opcao5'').val();
var opcao6 = $(''#opcao6'').val();
if(title.length > 0){
if(opcao2.length > 0){
$(''#resposta'').removeClass().html(''Salvando a enquete...<br clear="all"><br><img src="images/switch-loading.gif" />'');
$.ajax({
type : ''POST'',
url : ''funcoes/enquete_adm.php'',
dataType : ''json'',
data: {key:key,title:title,opcao1:opcao1,opcao2:opcao2,opcao3:opcao3,opcao4:opcao4,opcao5:opcao5,opcao6:opcao6},
success : function(data){
if(data.sql == ''ok''){
$(''#resposta'').addClass(''success-box'').html(''Enquete Salva!'').fadeIn(1000);
$(''#control'').fadeOut();
}else if(data.sql == ''error''){
$(''#resposta'').addClass(''info-box'').html(''Ops, aconteceu um erro. Por favor, tente novamente'').fadeIn(1000);
}
},
error: function (XMLHttpRequest, textStatus, errorThrown) {
alert("XMLHttpRequest " + XMLHttpRequest[0]);alert(" errorThrown: " + errorThrown);alert( " textstatus : " + textStatus);
}
});
}else{
$(''#resposta'').addClass(''warning-box'').html(''É necessário no mínimo duas opções'');
};
}else{
$(''#resposta'').addClass(''warning-box'').html(''Coloque a pergunta da enquete'');
};
return false;
});
}); // End
El error SyntaxError: Unexpected token <
probablemente significa que el punto final API no devolvió JSON en su cuerpo del documento, como debido a un 404.
En este caso, espera encontrar un {
(inicio de JSON); en cambio, encuentra un <
(comienzo de un elemento de encabezado).
Respuesta exitosa:
<html>
<head></head>
<body>
{"foo": "bar", "baz": "qux"}
</body>
</html>
Respuesta no encontrada:
<html>
<head></head>
<body>
<h1>Not Found</h1>
<p>The requested URL was not found on the server. If you entered the URL manually please check your spelling and try again.</p>
</body>
</html>
Intente visitar la URL del punto final de los datos en su navegador para ver qué se devuelve.
Eliminar esta línea de mi código resolvió mi problema.
header("Content-Type: application/json; charset=UTF-8");
Este error también puede surgir de una llamada JSON AJAX a un script PHP que tiene un error en su código. Los servidores a menudo se configuran para devolver información de error de PHP formateada con marcado HTML. Esta respuesta se interpreta como JSON no válida, lo que da como resultado el "error Token AJAX inesperado".
Para ver el error de PHP con Chrome, vaya al panel Red en el inspector web, haga clic en el archivo PHP que se muestra en el lado izquierdo y haga clic en la pestaña Respuesta.
Esto generalmente sucede cuando estás incluyendo o publicando en un archivo que no existe. El servidor devolverá un "formato 404 no encontrado" html con formato regular adjunto con
''<html></html>''
etiquetas. Ese primer chevron <no es válido js ni válido json, por lo tanto, desencadena un token inesperado.
¿Qué pasa si intentas cambiar ''funcoes / enquete_adm.php'' a una URL absoluta, solo para estar seguro?
EDITAR (varios años después)
La causa raíz puede no provenir siempre de errores 404. A veces puede realizar una solicitud a una API y recibir errores formateados en HTML. Me encontré con un par de casos en los que el punto final API debería haber regresado
{
error: "you must be authenticated to make this request"
}
Con el encabezado 401. Y en su lugar tengo
<html>You must be authenticated to make this request</html>
Con el encabezado 200.
Dado que el encabezado es 200, no puede decir que la solicitud ha fallado de antemano, y está atascado para probar y JSON.parse
la respuesta para verificar si es válida.
Esto me pasó con una página cargada a través de un iframe. La página ifrme src tenía una referencia de script 404. Obviamente, no pude encontrar la referencia del script en la página principal, así que me tomó un tiempo encontrar al culpable.
Simplemente ignore el paso de parámetros como un falso en las funciones de script java
Ex:
function getCities(stateId,locationId=false){
// Avoid writting locationId= false kind of statements
/*your code comes here*/
}
Evite escribir locationId = falso tipo de declaraciones, ya que esto dará el error en Chrome y IE
Solo voy a arrojar esto aquí porque me encontré con el mismo error pero por MUCHAS razones diferentes.
Estoy sirviendo a través de node / express / jade y había portado un antiguo archivo de jade. Una de las líneas era no ponerse a trabajar cuando Typekit falló:
script(type=''text/javascript'')
try{Typekit.load();}catch(e){}
Parecía bastante inocuo, pero finalmente me di cuenta de que para los bloques de scripts de jade en los que estás agregando contenido necesitas uno .
:
script(type=''text/javascript'').
try{Typekit.load();}catch(e){}
Simple, pero complicado.
Sospecho que recibes la codificación text / html en respuesta a tu solicitud, así que creo que el problema es:
dataType : ''json'',
intente cambiarlo a
dataType : ''html'',
De http://api.jquery.com/jQuery.get/ :
tipo de datos tipo: cadena El tipo de datos que se espera del servidor. Valor predeterminado: Intelligent Guess (xml, json, script o html).
Sospecho que uno de tus scripts incluye una URL de mapa fuente . (JQuery minificado contiene una referencia a un mapa fuente, por ejemplo).
Cuando abras las herramientas para desarrolladores de Chrome, Chrome intentará buscar el mapa fuente desde la URL para ayudar a la eliminación de fallas. Sin embargo, el mapa fuente en realidad no existe en su servidor, pero en su lugar se le envía una página 404 normal que contiene HTML.
También tenía un syntax error: unexpected token <
al publicar un formulario a través de ajax. Luego usé Curl para ver qué devuelve:
curl -X POST --data "firstName=a&lastName=a&[email protected]&pass=aaaa&mobile=12345678901&nID=123456789123456789&age=22&prof=xfd" http://handymama.co/CustomerRegistration.php
Tengo algo como esto como respuesta:
<br />
<b>Warning</b>: Cannot modify header information - headers already sent by (output started at /home/handymama/public_html/CustomerRegistration.php:1) in <b>/home/handymama/public_html/CustomerRegistration.php</b> on line <b>3</b><br />
<br />
<b>Warning</b>: Cannot modify header information - headers already sent by (output started at /home/handymama/public_html/CustomerRegistration.php:1) in <b>/home/handymama/public_html/CustomerRegistration.php</b> on line <b>4</b><br />
<br />
<b>Warning</b>: Cannot modify header information - headers already sent by (output started at /home/handymama/public_html/CustomerRegistration.php:1) in <b>/home/handymama/public_html/CustomerRegistration.php</b> on line <b>7</b><br />
<br />
<b>Warning</b>: Cannot modify header information - headers already sent by (output started at /home/handymama/public_html/CustomerRegistration.php:1) in <b>/home/handymama/public_html/CustomerRegistration.php</b> on line <b>8</b><br />
Entonces, todo lo que tuve que hacer fue simplemente cambiar el nivel de registro a solo errores en lugar de advertencia.
error_reporting(E_ERROR);
Tienes innecesario ;
(punto y coma):
Ejemplo aquí:
}else{
$(''#resposta'').addClass(''warning-box'').html(''É necessário no mínimo duas opções'');
};
El final ;
after }
es incorrecto.
Otro ejemplo aquí:
}else{
$(''#resposta'').addClass(''warning-box'').html(''Coloque a pergunta da enquete'');
};
Tuve un problema similar, y mi problema fue que estaba enviando javascript para mostrar los mensajes de la consola.
Incluso cuando miré el archivo en mi navegador (no a través de la aplicación), se mostró exactamente como lo esperaba (p. Ej., Las etiquetas adicionales no se mostraban), pero se mostraban en la salida html / texto e intentaban ser analizado
¡Espero que esto ayude a alguien!
asegúrese de no incluir el código jquery entre
<script> </ script>
Si es así, elimínelo y el código funcionará bien. Funcionó en mi caso.
revisé todos los caminos JS incluidos
Ejemplo Cambiar esto
<script src="js/bootstrap.min.js" type="text/javascript"></script>
A
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.6/js/bootstrap.min.js" type="text/javascript"></script>