Estoy ejecutando una llamada AJAX en mi script MooTools, esto funciona bien en Firefox pero en Chrome recibo un Uncaught SyntaxError: Unexpected token :
error, no puedo determinar por qué. Al comentar el código para determinar dónde está el código incorrecto no se obtiene nada, creo que puede ser un problema que se devuelva el JSON. Al comprobar en la consola, veo que el JSON devuelto es este:
{"votes":47,"totalvotes":90}
No veo ningún problema con él, ¿por qué ocurriría este error?
vote.each(function(e){
e.set('send', {
onRequest : function(){
spinner.show();
},
onComplete : function(){
spinner.hide();
},
onSuccess : function(resp){
var j = JSON.decode(resp);
if (!j) return false;
var restaurant = e.getParent('.restaurant');
restaurant.getElements('.votes')[0].set('html', j.votes + " vote(s)");
$$('#restaurants .restaurant').pop().set('html', "Total Votes: " + j.totalvotes);
buildRestaurantGraphs();
}
});
e.addEvent('submit', function(e){
e.stop();
this.send();
});
});
javascript
mootools
google-chrome
trobrock
fuente
fuente
Respuestas:
Ver errores rojos
en la pestaña de la consola del desarrollador de Chrome hay una indicación de HTML en el cuerpo de la respuesta.
Lo que realmente está viendo es la reacción de su navegador a la inesperada línea superior
<!DOCTYPE html>
del servidor.fuente
Unexpected token :
. Su respuesta no tiene relación alguna con el problema de OP.Solo un FYI para las personas que podrían tener el mismo problema: solo tuve que hacer que mi servidor enviara el JSON como application / json y el controlador predeterminado jQuery funcionó bien.
fuente
application/json
resolver el error. No estoy usando JSONP.Esto me acaba de pasar, y el motivo no fue ninguno de los anteriores. Estaba usando el comando jQuery getJSON y agregué
callback=?
para usar JSONP (ya que necesitaba ir entre dominios), y devolví el código JSON{"foo":"bar"}
y obtuve el error.Esto se debe a que debería haber incluido los datos de devolución de llamada, algo así como
jQuery17209314005577471107_1335958194322({"foo":"bar"})
Aquí está el código PHP que usé para lograr esto, que se degrada si se usa JSON (sin devolución de llamada):
Esperemos que eso ayude a alguien en el futuro.
fuente
Acabo de resolver el problema. Hubo algo que causó problemas con una llamada de solicitud estándar, por lo que este es el código que usé en su lugar:
Si alguien sabe por qué el objeto Solicitud estándar me estaba dando problemas, me encantaría saberlo.
fuente
this.headers.extend({'Accept': 'application/json', 'X-Request': 'JSON'});
- vaya a la figura$$
allí?Pensé en agregar mi problema y resolución a la lista.
Estuve obteniendo:
Uncaught SyntaxError: Unexpected token <
y el error apuntaba a esta línea en mi declaración de éxito de ajax:Más tarde descubrí que, además de los resultados de json, se enviaba HTML con la respuesta porque tenía un error en mi PHP. Cuando obtiene un error en PHP, puede configurarlo para que le advierta con enormes tablas naranjas y esas tablas fueron lo que arrojó el JSON.
Lo descubrí simplemente haciendo un
console.log(response)
para ver lo que realmente se estaba enviando. Si se trata de un problema con los datos JSON, solo intente ver si puede hacer un console.log o alguna otra declaración que le permita ver lo que se envía y lo que se recibe.fuente
Cuando solicita su archivo JSON, el servidor devuelve el
Content-Type
encabezado JavaScript (text/javascript
) en lugar de JSON (application/json
).Según los documentos de MooTools :
En consecuencia, MooTools intenta evaluar su JSON como JavaScript, y cuando intenta evaluar dicho JSON:
como JavaScript, el analizador trata
{
y}
como un ámbito de bloque en lugar de notación de objeto. Es lo mismo que evaluar el siguiente "código":Como puede ver,
:
es totalmente inesperado allí.La solución es establecer el
Content-Type
encabezado correcto para el archivo JSON. Si lo guarda con.json
extensión, su servidor debería hacerlo solo.fuente
Parece que su respuesta se está evaluando de alguna manera. Esto da el mismo error en Chrome:
Esto se debe a que las llaves '{...}' están siendo interpretadas por javascript como un bloque de código y no como un objeto literal como cabría esperar.
Vería la función JSON.decode () y vería si hay una evaluación allí.
Problema similar aquí: Eval () = token inesperado: error
fuente
Si nada tiene sentido, este error también puede ser causado por un error PHP que está incrustado dentro de html / javascript, como el siguiente
No el
<br />
etc. en el código que PHP inserta en html está causando el error . Para corregir este tipo de error (suprimir advertencia), usé este código al comienzoPara ver, haga clic derecho en la página, "ver código fuente" y luego examine html completo para detectar este error.
fuente
" No detectada SyntaxError: inesperado símbolo " apariencia de error cuando los datos vuelven formato JSON mal, en algún caso, no se sabe que tiene formato JSON mal.
por favor verifíquelo con alert (); función
su mensaje recibido debe ser: {"firstName": "John", "lastName": "Doe"}
y luego puede usar el código a continuación
sin error "Error de sintaxis no detectado: token inesperado ",
pero si obtiene un formato json incorrecto, por
ejemplo:
o
para que tenga un formato json incorrecto, corríjalo antes de codificar JSON.de o JSON.parse
fuente
console.log()
lugar dealert()
para la depuración.Esto me pasó a mí hoy también. Estaba usando EF y devolvía una entidad en respuesta a una llamada AJAX. Las propiedades virtuales en mi entidad estaban causando un error de dependencia cíclico que no se detectaba en el servidor. Al agregar el atributo [ScriptIgnore] en las propiedades virtuales, se solucionó el problema.
En lugar de usar el atributo ScriptIgnore, probablemente sería mejor devolver un DTO.
fuente
Esto sucedió porque tengo una configuración de regla en mi servidor express para enrutar cualquier 404 a
/#
más cualquiera que sea la solicitud original. Permitir que el enrutador angular / js maneje la solicitud. Si no hay una ruta js para manejar esa ruta, se realiza una solicitud al/#/whatever
servidor, que es solo una solicitud para/
toda la página web.Entonces, por ejemplo, si quería hacer una solicitud
/correct/somejsfile.js
pero no la escribí correctamente,/wrong/somejsfile.js
la solicitud se realiza al servidor. Esa ubicación / archivo no existe, por lo que el servidor responde con un302 location: /#/wrong/somejsfile.js
. El navegador sigue felizmente la redirección y se devuelve toda la página web. El navegador analiza la página como js y obtienesEntonces, para ayudar a encontrar la ruta / solicitud ofensiva, busque 302 solicitudes.
Espero que ayude a alguien.
fuente
Tuve el mismo problema y resultó que el Json que regresó del servidor no era Json-P válido. Si no usa la llamada como una llamada de dominio cruzado, use Json regular.
fuente
Obtuve un "
SyntaxError: Unexpected token I
" cuandojQuery.getJSON()
intentaba des serializar un valor de coma flotante deInfinity
, codificado comoINF
, que es ilegal en JSON.fuente
En mi caso, me encontré con el mismo error, mientras ejecutaba la aplicación Spring mvc debido a una asignación incorrecta en mi controlador mvc
Cambié la asignación anterior a
o
fuente
Para mí, la bombilla se encendió cuando vi la fuente en la página dentro del navegador Chrome. Tenía un soporte adicional en una declaración if. Inmediatamente verá el círculo rojo con una cruz en la línea que falla. Es un mensaje de error bastante inútil, porque el error de sintaxis no capturado: el token inesperado no hace referencia a un número de línea cuando aparece por primera vez en la consola de Chrome.
fuente
Hice mal en esto
Ya he inicializado la
fs
variable, pero otra vez pusevar
en la segunda línea, esta también da ese tipo de error ...fuente
Para aquellos que experimentan esto en AngularJs 1.4.6 o similar, mi problema fue que angular no encontró mi plantilla porque no se pudo encontrar el archivo en la
templateUrl
(ruta) que proporcioné. Solo tenía que proporcionar un camino accesible y el problema desapareció.fuente
En mi caso, era una URL errónea (no existente), por lo que tal vez su 'envío' en la segunda línea debería ser otra ...
fuente
Mi error fue olvidar una cita simple / doble alrededor de la URL en JavaScript:
entonces el código equivocado era:
y código correcto :
fuente
SyntaxError no detectada: fichas inesperado }
Chrome me dio el error para este código de muestra:
y lo resolvió arreglando el onclick para que sea como
Pero el error no tiene nada que ver con el problema.
fuente