Untaught SyntaxError: Token inesperado:

Estou executando uma chamada AJAX no meu script MooTools, isso funciona bem no Firefox, mas no Chrome estou recebendo um Uncaught SyntaxError: Unexpected token : erro Uncaught SyntaxError: Unexpected token : erro, não posso determinar o porquê. Comentando código para determinar onde o código incorreto não rende nada, estou pensando que pode ser um problema com o retorno do JSON. Verificando no console, vejo o JSON retornado é este:

 {"votes":47,"totalvotes":90} 

Eu não vejo nenhum problema com isso, por que esse erro ocorreria?

 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(); }); }); 

Apenas um FYI para pessoas que podem ter o mesmo problema – eu só tive que fazer o meu servidor enviar de volta o JSON como application / json e o manipulador padrão jQuery funcionou bem.

Vendo erros vermelhos

Untaught SyntaxError: Token inesperado <

na guia do console do seu desenvolvedor do Chrome é frequentemente uma indicação de 301 Redirects que podem ser causados ​​por ter uma regra estranha no arquivo .htaccess.

O que você está realmente vendo é a reação do seu navegador à inesperada linha de cima < !DOCTYPE html> do servidor.

Isso acaba de acontecer comigo e a razão não foi nenhuma das razões acima. Eu estava usando o comando jQuery getJSON e adicionando callback=? para usar JSONP (como eu precisei fazer o cross-domain), e retornar o código JSON {"foo":"bar"} e obter o erro.

Isso é porque eu deveria ter incluído os dados de retorno de chamada, algo como jQuery17209314005577471107_1335958194322({"foo":"bar"})

Aqui está o código PHP que usei para conseguir isso, que degrada se o JSON (sem um callback) for usado:

 $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; } 

Espero que isso ajude alguém no futuro.

Acabei de resolver o problema. Houve algo causando problemas com uma chamada de solicitação padrão, então este é o código que usei:

 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); }); }); 

Se alguém souber por que o object Request padrão estava me dando problemas, eu adoraria saber.

Eu pensei em adicionar meu problema e resolução à lista.

Eu estava recebendo: Uncaught SyntaxError: Unexpected token < e o erro estava apontando para esta linha na minha declaração de sucesso ajax:

 var total = $.parseJSON(response); 

Mais tarde, descobri que, além dos resultados do json, havia HTML sendo enviado com a resposta porque eu tinha um erro no meu PHP. Quando você recebe um erro no PHP você pode configurá-lo para avisá-lo com enormes tabelas laranja e essas tabelas foram o que estava jogando fora o JSON.

Eu descobri isso apenas fazendo um console.log(response) para ver o que realmente estava sendo enviado. Se for um problema com os dados JSON, tente ver se você pode fazer um console.log ou alguma outra instrução que permitirá que você veja o que é enviado e o que é recebido.

Quando você solicita seu arquivo JSON, o servidor retorna o header JavaScript Content-Type ( text/javascript ) em vez de JSON ( application/json ).

De acordo com a documentação do MooTools :

As respostas com o tipo de conteúdo javascript serão avaliadas automaticamente.

Em resultado, o MooTools tenta avaliar seu JSON como JavaScript, e quando você tenta avaliar esse JSON:

 {"votes":47,"totalvotes":90} 

como JavaScript, o analisador trata { e } como um escopo de bloco em vez de uma notação de object. É o mesmo que avaliar o seguinte “código”:

 "votes":47,"totalvotes":90 

Como você pode ver, é totalmente inesperado.

A solução é definir o header Content-Type correto para o arquivo JSON. Se você salvá-lo com a extensão .json , seu servidor deverá fazê-lo sozinho.

Parece que sua resposta está sendo avaliada de alguma forma. Isso dá o mesmo erro no Chrome:

 var resp = '{"votes":47,"totalvotes":90}'; eval(resp); 

Isso se deve ao fato de as chaves {…} serem interpretadas pelo javascript como um bloco de código e não como um literal de object como se poderia esperar.

Eu olharia a function JSON.decode () e veria se há um eval lá.

Problema semelhante aqui: Eval () = Token inesperado: erro

Eu tive o mesmo problema e descobriu-se que o Json retornou do servidor não era válido Json-P. Se você não usar a chamada como uma chamada crossdomain, use o Json regular.

http://json-p.org/validator.html

Untaught SyntaxError: Erro inesperado ” aparecimento de erro quando seus dados retornam formato json errado, em alguns casos, você não sabe que você tem formato json errado.
por favor verifique com alerta (); function

 onSuccess : function(resp){ alert(resp); } 

sua mensagem recebida deve ser: {“firstName”: “John”, “lastName”: “Doe”}
e então você pode usar o código abaixo

 onSuccess : function(resp){ var j = JSON.decode(resp); // but in my case i'm using: JSON.parse(resp); } 

sem erro ” Untaught SyntaxError: Token inesperado
mas se você errar no formato json
ex:

… {“firstName”: “John”, “lastName”: “Doe”}

ou

 Undefined variable: errCapt in .... on line65
{"firstName":"John", "lastName":"Doe"}

para que você tenha o formato json errado, corrija-o antes de JSON.decode ou JSON.parse

Isso aconteceu comigo hoje também. Eu estava usando o EF e retornando uma entidade em resposta a uma chamada AJAX. As propriedades virtuais da minha entidade estavam causando um erro de dependência cíclica que não estava sendo detectado no servidor. Adicionando o atributo [ScriptIgnore] nas propriedades virtuais, o problema foi corrigido.

Em vez de usar o atributo ScriptIgnore, provavelmente seria melhor simplesmente retornar um DTO.

Isso aconteceu porque eu tenho uma configuração de regra no meu servidor expresso para rotear qualquer 404 de volta para /# mais qualquer que seja a solicitação original. Permitir que o roteador angular / js manipule a solicitação. Se não houver uma rota js para manipular esse caminho, uma solicitação para /#/whatever é feita para o servidor, que é apenas uma solicitação para / , a página da Web inteira.

Então, por exemplo, se eu quisesse fazer uma solicitação para /correct/somejsfile.js mas /correct/somejsfile.js falta em typed to /wrong/somejsfile.js a solicitação é feita para o servidor. Esse local / arquivo não existe, portanto, o servidor responde com um 302 location: /#/wrong/somejsfile.js . O navegador segue feliz o redirecionamento e toda a página da Web é retornada. O navegador analisa a página como js e você obtém

Untaught SyntaxError: Token inesperado <

Então, para ajudar a encontrar o caminho / pedido ofensivo, procure por 302 solicitações.

Espero que ajude alguém.

Eu tenho um ” SyntaxError: Unexpected token I ” quando eu usei jQuery.getJSON() para tentar de-serializar um valor de ponto flutuante do Infinity , codificado como INF , que é ilegal em JSON.

No meu caso eu corri para o mesmo erro, durante a execução do aplicativo mvc primavera devido ao mapeamento errado no meu controlador mvc

 @RequestMapping(name="/private/updatestatus") 

eu mudei o mapeamento acima para

  @RequestMapping("/private/updatestatus") 

ou

  @RequestMapping(value="/private/updatestatus",method = RequestMethod.GET) 

Para mim, a lâmpada acendeu quando visualizei a fonte na página do navegador Chrome. Eu tinha um suporte extra em uma declaração if. Você verá imediatamente o círculo vermelho com uma cruz na linha falhada. É uma mensagem de erro bastante inútil, porque o erro de syntax não detectada: o token inesperado não faz referência a um número de linha quando aparece pela primeira vez no console do Google Chrome.

Eu fiz errado neste

  `var fs = require('fs'); var fs.writeFileSync(file, configJSON);` 

Já eu inicializei a variável fs.Mas de novo eu coloquei var na segunda linha.Este também dá esse tipo de erro …

Para aqueles que experimentam isso no AngularJs 1.4.6 ou similar, meu problema foi com o angular não encontrar o meu modelo porque o arquivo no templateUrl (path) que eu forneci não pôde ser encontrado. Eu apenas tive que fornecer um caminho alcançável e o problema foi embora.

Untaught SyntaxError: token inesperado}

O Chrome me indicou o erro deste código de amostra:

 
zzz

e resolveu consertar o onclick para ser como

 ... onclick="window.location = '?dir=zzz'" ... 

Mas o erro não tem nada a ver com o problema ..