javascript - react - uncaught syntaxerror: unexpected token<angular
SyntaxError no detectada: fichas inesperado: (17)
Estoy ejecutando una llamada AJAX en mi script de MooTools, esto funciona bien en Firefox, pero en Chrome estoy obteniendo 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 produce nada, creo que puede haber un problema con la devolución del JSON. Comprobando 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();
});
});
Acabo de resolver el problema. Hubo algo que causaba problemas con una llamada de solicitud estándar, por lo que este es el código que utilicé en su lugar:
vote.each(function(element){
element.addEvent(''submit'', function(e){
e.stop();
new Request.JSON({
url : e.target.action,
onRequest : function(){
spinner.show();
},
onComplete : function(){
spinner.hide();
},
onSuccess : function(resp){
var j = resp;
if (!j) return false;
var restaurant = element.getParent(''.restaurant'');
restaurant.getElements(''.votes'')[0].set(''html'', j.votes + " vote(s)");
$$(''#restaurants .restaurant'').pop().set(''html'', "Total Votes: " + j.totalvotes);
buildRestaurantGraphs();
}
}).send(this);
});
});
Si alguien sabe por qué el objeto Request estándar me estaba dando problemas, me gustaría saberlo.
Cuando solicita su archivo JSON, el servidor devuelve JavaScript Content-Type
header ( text/javascript
) en lugar de JSON ( application/json
).
De acuerdo con los documentos de MooTools :
Las respuestas con el tipo de contenido de JavaScript se evaluarán automáticamente.
En resultado, MooTools intenta evaluar tu JSON como JavaScript, y cuando intentas evaluar ese JSON:
{"votes":47,"totalvotes":90}
como JavaScript, el analizador trata {
and }
como un ámbito de bloque en lugar de la notación de objeto. Es lo mismo que evaluar el siguiente "código":
"votes":47,"totalvotes":90
Como puedes ver,: es totalmente inesperado allí.
La solución es establecer el encabezado Content-Type
correcto para el archivo JSON. Si lo guarda con extensión .json
, su servidor debería hacerlo solo.
En mi caso, encontré el mismo error, mientras ejecutaba la aplicación spring mvc debido a un mapeo incorrecto en mi controlador mvc
@RequestMapping(name="/private/updatestatus")
Cambié el mapeo anterior a
@RequestMapping("/private/updatestatus")
o
@RequestMapping(value="/private/updatestatus",method = RequestMethod.GET)
Esto me acaba de pasar, y la razón no fue ninguna de las razones anteriores. Estaba usando el comando jQuery getJSON y agregué callback=?
usar JSONP (ya que necesitaba pasar de dominio cruzado) y devolver el código JSON {"foo":"bar"}
y obtener 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):
$ret[''foo''] = "bar";
finish();
function finish() {
header("content-type:application/json");
if ($_GET[''callback'']) {
print $_GET[''callback'']."(";
}
print json_encode($GLOBALS[''ret'']);
if ($_GET[''callback'']) {
print ")";
}
exit;
}
Con suerte eso ayudará a alguien en el futuro.
Esto me pasó hoy también. Estaba usando EF y devolviendo una Entidad en respuesta a una llamada AJAX. Las propiedades virtuales en mi entidad causaban un error de dependencia cíclica que no se detectaba en el servidor. Al agregar el atributo [ScriptIgnore] en las propiedades virtuales, el problema se solucionó.
En lugar de utilizar el atributo ScriptIgnore, probablemente sería mejor devolver un DTO.
Esto sucedió porque tengo una configuración de reglas en mi servidor Express para enrutar cualquier 404 de vuelta a /#
más lo que sea que fue 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 a /#/whatever
sea para el servidor, que es solo una solicitud para /
, toda la página web.
Entonces, por ejemplo, si quería hacer una solicitud para /correct/somejsfile.js
pero extraño escribirla en /wrong/somejsfile.js
la solicitud se realiza en el servidor. Esa ubicación / archivo no existe, por lo que el servidor responde con una 302 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 obtienes
Untaught SyntaxError: Token inesperado <
Entonces, para ayudar a encontrar la ruta / solicitud ofensiva, busque 302 solicitudes.
Espero que ayude a alguien.
Hice mal en esto
`var fs = require(''fs'');
var fs.writeFileSync(file, configJSON);`
Ya inicié la variable fs
Pero de nuevo puse var
en la segunda línea. Este también da ese tipo de error ...
Para aquellos que experimentaron esto en AngularJs 1.4.6 o similar, mi problema era que angular no encontraba mi plantilla porque el archivo en la templateUrl
(ruta) que proporcioné no se pudo encontrar. Solo tenía que proporcionar un camino accesible y el problema desapareció.
Para mí, la bombilla se encendió cuando vi la fuente a la página dentro del navegador Chrome. Tenía un paréntesis 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 token de error de sintaxis no capturada: token inesperado no hace referencia a un número de línea cuando aparece por primera vez en la consola de Chrome.
Parece que tu respuesta está siendo evaluada de alguna manera. Esto arroja el mismo error en Chrome:
var resp = ''{"votes":47,"totalvotes":90}'';
eval(resp);
Esto se debe a que las llaves ''{...}'' son interpretadas por javascript como un bloque de código y no como un objeto literal como uno podría esperar.
Me gustaría ver la función JSON.decode () y ver si hay una evaluación allí.
Problema similar aquí: Eval () = token inesperado: error
Pensé en agregar mi problema y resolución a la lista.
Uncaught SyntaxError: Unexpected token <
y el error apuntaba a esta línea en mi declaración de éxito de ajax:
var total = $.parseJSON(response);
Más tarde descubrí que, además de los resultados json, se enviaba HTML con la respuesta porque tenía un error en mi PHP. Cuando obtiene un error en PHP, puede configurarlo para advertirle con enormes tablas anaranjadas y esas tablas eran lo que estaba arrojando el JSON.
Lo descubrí simplemente haciendo un console.log(response)
para ver lo que en realidad estaba siendo enviado. Si se trata de un problema con los datos de JSON, simplemente intente ver si puede hacer un console.log u otra declaración que le permita ver qué se envía y qué se recibe.
Solo un FYI para personas que podrían tener el mismo problema: solo tuve que hacer que mi servidor enviara de vuelta el JSON como application / json y el manejador jQuery predeterminado funcionaba bien.
Tuve el mismo problema y resultó que el Json devuelto por el servidor no era válido Json-P. Si no usa la llamada como una llamada de dominio cruzado, use el Json común.
Ver errores rojos
Untaught SyntaxError: Token inesperado <
en la pestaña de la consola del desarrollador de Chrome a menudo se indican 301 redireccionamientos que podrían deberse a tener una regla extraña en el archivo .htaccess.
Lo que realmente está viendo es la reacción de su navegador a la inesperada línea superior <!DOCTYPE html>
del servidor.
SyntaxError: Unexpected token I
un " SyntaxError: Unexpected token I
" cuando utilicé jQuery.getJSON()
para jQuery.getJSON()
un valor de coma flotante de Infinity
, codificado como INF
, que es ilegal en JSON.
Aspecto del error " Uncaught SyntaxError: Inexpected token " cuando los datos devuelven el formato JSON incorrecto, en algunos casos, no sabe que tiene el formato JSON equivocado.
por favor, verifíquelo con alert (); función
onSuccess : function(resp){
alert(resp);
}
su mensaje recibido debe ser: {"firstName": "John", "lastName": "Doe"}
y luego puedes usar el código a continuación
onSuccess : function(resp){
var j = JSON.decode(resp); // but in my case i''m using: JSON.parse(resp);
}
sin error " Sintaxis no detectada: Token inesperado "
pero si obtienes el formato json equivocado
ex:
... {"firstName": "John", "lastName": "Doe"}
o
Undefined variable: errCapt in .... on line<b>65</b><br/>{"firstName":"John", "lastName":"Doe"}
para que tenga el formato JSON incorrecto, reparelo antes que JSON.decode o JSON.parse
SyntaxError no detectada: fichas inesperado }
Chrome me envió el error para este código de muestra:
<div class="file-square" onclick="window.location = " ?dir=zzz">
<div class="square-icon"></div>
<div class="square-text">zzz</div>
</div>
y lo resolvió arreglando el onclick para que sea como
... onclick="window.location = ''?dir=zzz''" ...
Pero el error no tiene nada que ver con el problema ...