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, não consigo determinar o porquê. Comentar o código para determinar onde o código incorreto não produz nada, acho que pode ser um problema com o retorno do JSON. Verificando no console, vejo o JSON retornado, é este:
{"votes":47,"totalvotes":90}
Não vejo nenhum problema, por que esse erro ocorre?
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
fonte
fonte
Respostas:
Vendo erros vermelhos
na guia console do desenvolvedor do Chrome, há uma indicação de HTML no corpo da resposta.
Na verdade, o que você está vendo é a reação do seu navegador à inesperada linha superior
<!DOCTYPE html>
do servidor.fonte
Unexpected token :
. Sua resposta não tem nenhuma relação com o problema do OP.Apenas um FYI para pessoas que podem ter o mesmo problema - eu apenas tive que fazer meu servidor enviar o JSON como application / json e o manipulador padrão do jQuery funcionou bem.
fonte
application/json
resolver o erro. Eu não estou usando JSONP.Isso acabou de acontecer comigo, e o motivo não foi um dos motivos acima. Eu estava usando o comando jQuery getJSON e adicionando
callback=?
para usar JSONP (conforme eu precisava entrar em vários domínios), retornando o código JSON{"foo":"bar"}
e obtendo 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 eu usei para fazer isso, que degrada se JSON (sem retorno de chamada) for usado:
Espero que ajude alguém no futuro.
fonte
Acabei de resolver o problema. Havia algo causando problemas com uma chamada de solicitação padrão, então este é o código que eu usei:
Se alguém souber por que o objeto Request padrão estava me dando problemas, eu adoraria saber.
fonte
this.headers.extend({'Accept': 'application/json', 'X-Request': 'JSON'});
- figura go$$
lá?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 do ajax:Mais tarde, descobri que, além dos resultados do json, havia o envio de HTML com a resposta, porque havia um erro no meu PHP. Quando você recebe um erro no PHP, 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 houver um problema com os dados JSON, tente ver se você pode executar um console.log ou alguma outra instrução que permita ver o que é enviado e o que é recebido.fonte
Quando você solicita seu arquivo JSON, o servidor retorna o
Content-Type
cabeçalho JavaScript (text/javascript
) em vez de JSON (application/json
).De acordo com os documentos do MooTools :
Como resultado, o MooTools tenta avaliar seu JSON como JavaScript e quando você tenta avaliar esse JSON:
como JavaScript, o analisador trata
{
e}
como um escopo de bloco em vez de notação de objeto. É o mesmo que avaliar o seguinte "código":Como você pode ver,
:
é totalmente inesperado lá.A solução é definir o
Content-Type
cabeçalho correto para o arquivo JSON. Se você salvá-lo com.json
extensão, seu servidor deve fazê-lo sozinho.fonte
Parece que sua resposta está sendo avaliada de alguma forma. Isso dá o mesmo erro no Chrome:
Isso se deve ao fato de os chavetas '{...}' serem interpretados pelo javascript como um bloco de código e não como um objeto literal como se poderia esperar.
Gostaria de olhar para a função JSON.decode () e ver se há uma avaliação lá.
Problema semelhante aqui: Eval () = Token inesperado: erro
fonte
Se nada fizer sentido, esse erro também pode ser causado pelo erro PHP incorporado ao html / javascript, como o abaixo
Nem o
<br />
etc no código que é inserido no html pelo PHP está causando o erro . Para corrigir esse tipo de erro (suprimir aviso), use este código no inícioPara visualizar, clique com o botão direito do mouse na página "view source" e examine o html completo para identificar esse erro.
fonte
Aparência do erro " Untaught SyntaxError: token inesperado " quando seus dados retornam o formato json errado, em alguns casos, você não sabe que tem o formato json errado.
por favor verifique com alert (); função
sua mensagem recebida deve ser: {"firstName": "John", "lastName": "Doe"}
e você pode usar o código abaixo
com o erro " Untaught SyntaxError: token inesperado ",
mas se você errar o formato json
ex:
ou
para que você tenha o formato json errado, corrija-o antes de JSON.decode ou JSON.parse
fonte
console.log()
vez dealert()
para depuração.Isso aconteceu comigo hoje também. Eu estava usando 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 retornar apenas um DTO.
fonte
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. Permitindo que o roteador angular / js manipule a solicitação. Se não houver uma rota js para manipular esse caminho, uma solicitação/#/whatever
será feita ao servidor, que é apenas uma solicitação para/
toda a página da web.Por exemplo, se eu quisesse fazer uma solicitação,
/correct/somejsfile.js
mas não o escrevi,/wrong/somejsfile.js
a solicitação será feita ao servidor. Esse local / arquivo não existe, então o servidor responde com um302 location: /#/wrong/somejsfile.js
. O navegador segue alegremente o redirecionamento e a página inteira é retornada. O navegador analisa a página como js e você obtémPortanto, para ajudar a encontrar o caminho / solicitação incorreto, procure 302 solicitações.
Espero que ajude alguém.
fonte
Eu tive o mesmo problema e verificou-se que o Json retornado do servidor não era válido Json-P. Se você não usar a chamada como uma chamada entre domínios, use o Json regular.
fonte
Recebi um "
SyntaxError: Unexpected token I
" quandojQuery.getJSON()
tentava desserializar um valor de ponto flutuanteInfinity
codificado comoINF
ilegal no JSON.fonte
No meu caso, eu corri para o mesmo erro, ao executar o aplicativo spring mvc devido ao mapeamento errado no meu controlador mvc
eu mudei o mapeamento acima para
ou
fonte
Para mim, a lâmpada acendeu quando eu vi a fonte na página dentro 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 que falhou. É uma mensagem de erro pouco útil, porque o erro de sintaxe não capturado: O token inesperado não faz referência a um número de linha quando ele aparece pela primeira vez no console do Chrome.
fonte
Eu errei nisso
Já intialized a
fs
variável.Mas novamente eu coloqueivar
na segunda linha.Este também dá esse tipo de erro ...fonte
Para aqueles que enfrentam isso no AngularJs 1.4.6 ou similar, meu problema era com o angular não encontrar meu modelo porque o arquivo no
templateUrl
(caminho) que forneci não foi encontrado. Eu só precisava fornecer um caminho acessível e o problema desapareceu.fonte
No meu caso, era um URL errado (não existente), então talvez o seu 'envio' na segunda linha deva ser outro ...
fonte
Meu erro foi esquecer as aspas simples / dupla em torno do URL em javascript:
código tão errado foi:
e código correto :
fonte
SyntaxError não capturado: token inesperado}
O Chrome me forneceu o erro para este código de exemplo:
e resolveu consertar o onclick para ser como
Mas o erro não tem nada a ver com o problema ..
fonte