Chrome: sintaxe não detectadaErro: final de entrada inesperado

176

Ao carregar minha página no Google Chrome, recebo um erro vago no console:

SyntaxError não capturado: final de entrada inesperado

Não tenho ideia do que está causando isso. Como eu iria depurar esse erro?

dlaurent86
fonte
2
Verificar a resposta em um sniffer de rede pode lhe dar uma pista. Meu palpite é que o Content-lengthcabeçalho especifique mais bytes do que a resposta contém, ou talvez o servidor, de alguma forma, envie HTML inválido.
tdammers
2
Em falta} na maioria das vezes (javascript). Verifique o final de suas aulas e funções. Tente adicionar outro fechamento} no final do seu script e redefina o seu código. Se houver algum recuo estranho no seu código, então, em algum lugar logo antes disso, provavelmente é o local em que um} desapareceu.
OG Sean
Eu tive esse problema ao carregar o JS incorretamente. Eu o carreguei como <script>https://example.com/a.js</script>e deveria ter sido #<script src="https://example.com/a.js"></script>
Daniel Apt
Estou recebendo esse erro hoje no Planilhas Google. Meu palpite é que um de seus arquivos JS é tão grande que está sendo finalizado sem carregar totalmente. Ou um de seus servidores de aplicativos possui um bug e está fechando a conexão http antes que o arquivo JS seja totalmente baixado.
Teddy

Respostas:

227

Esse erro em particular é um fato irritante sobre . Na maioria dos casos, seu JavaScript está quebrado de alguma forma. Por exemplo, faltando um }ou algo parecido.

Exemplo dado, isso produzirá "Fim inesperado de entrada" também:

eval('[{"test": 4}') // notice the missing ]

Mas a causa principal dos problemas parece ser que o URL JSON solicitado possui um Tipo de Conteúdo do text/htmlqual o Chrome aparentemente tenta analisar como HTML, o que resulta no final inesperado da entrada devido ao fato de as tags de imagem incluídas estarem sendo analisado.

Tente definir o Tipo de conteúdo como text/plainAcho que deve corrigir os problemas.

No entanto, o V8 poderia fazer um trabalho melhor sobre dizer exatamente onde a entrada terminou inesperadamente.

Ivo Wetzel
fonte
2
ok Obrigado, removi a solicitação do json todos juntos e o erro foi embora. Ainda estou para descobrir o que exatamente está errado com a minha solicitação do json. eu simplesmente não tinha idéia de onde começar a depuração. se posso perguntar como é que você determinar a causa raiz
dlaurent86
2
Pode não ser tão óbvio. Eu recebi esse erro no JS minificado devido a ele ser mutilado pelo minimizador, enquanto o JS não minificado era perfeitamente legal e válido. Infelizmente, o Chrome só mostra a linha onde ocorre o erro, o que para JS minimizado é geralmente o arquivo inteiro ...
Cerin
Não muito onde a entrada terminou (porque isso seria no final). Em vez disso, saber o que era esperado ajudaria toneladas.
Andrews
Salvei meu rabo. Eu estava ficando terrivelmente irritado com a ambiguidade. Obrigado.
precisa saber é o seguinte
4
Eu tive o mesmo erro, porque eu estava usando JSON.parse (texto) e o valor do texto estava em uma string vazia
A Khudairy
73

Experimente o Firebug for Mozilla - ele mostrará a posição dos desaparecidos }.

http://getfirebug.com/


fonte
12
Não precisava do Firebug. O console no Firefox me disse exatamente o que linha e qual personagem estava faltando
Dylan Valade
1
Também não precisava do firefug. O console do firefox ctrl+shift+iinformará.
Benjamin Crouzier 15/10
1
Aviso, se o script for minimizado para uma única linha enorme, espere que o Firefox seja interrompido por vários minutos / horas / anos.
Cerin
1
Esta é de longe a maneira mais fácil de rastrear esses erros de sintaxe
BentOnCoding
meu deus obrigado Eu sinto que o Chrome está tão à frente em comparação com o Firefox em termos de ferramentas para desenvolvedores. é incrível como ele não consegue acertar essa coisa pequena. me salvou de uma grande dor de cabeça!
Isaiah Lee
33

Veja meu caso em outra pergunta semelhante :

No meu caso, eu estava tentando analisar um JSON vazio:

JSON.parse(stringifiedJSON);

Em outras palavras, o que aconteceu foi o seguinte:

JSON.parse("");
falsarella
fonte
2
Sim, eu tinha esse também! Você pode resolver facilmente, fornecendo "{}" em vez de uma string vazia
cronoklee
1
Eu estava recebendo json vazio devido a uma barra dupla em uma URL (por exemplo, localhost: 8080 // mypath / blagh) e o servidor estava retornando uma resposta vazia para isso.
jpierson
1
Eu vim aqui apenas para confirmar esta solução.
Luís Assunção
10

Eu recebo esse erro quando omiti um caractere de chave de fechamento ( }) no código JavaScript. Verifique se o seu aparelho está bem equilibrado.

HBP
fonte
10

Para o registro, para quem tentar encontrar as várias causas desse erro. Um atributo de dados HTML5 vazio

data-mydata = ''

causa o erro também. Você deve verificar quando o valor dos dados é uma sequência nula e não incluir o atributo. Escusado será dizer que isso é amplamente relevante para o HTML gerado por script.

DroidOS
fonte
Nunca teria descoberto isso sem você. Eu estava usando o VideoJS e copiei o html para o player de vídeo da página deles. Ele tinha um espaço reservado de atributo de dados que você poderia usar, mas eu não. O vídeo não estava carregando e eu estava recebendo o erro que todo mundo está falando. Depois de excluir data-setup='{"example_option":true}' Tudo funcionou muito bem.
Tyler Buchea
1
@ user1002379, feliz por poder ajudar.
DroidOS
8

O problema para mim era que eu estava fazendo $ .ajax com dataType: "json"uma solicitação POST que estava retornando um HTTP 201 (criado) e nenhum corpo de solicitação. A correção foi simplesmente remover essa chave / valor.

Blaskovicz
fonte
Iniciei uma solicitação ajax (upload) e a cancelei antes que ela fosse concluída e recebi esse erro.
Dustin Poissant
6

JSHint é bom em encontrar a localização de colchetes ausentes ou sintaxe incorreta.

Harfatum
fonte
6

Outra causa desse erro: se sua API responder intencionalmente sem corpo de resposta, mas responder com um 200 OKcódigo de status em vez de um 204 No Contentcódigo de status. Algumas bibliotecas JavaScript podem não responder bem a tipos de conteúdo inesperados quando não há conteúdo; portanto, use o código de status correto!

Andrew
fonte
3

Definitivamente, haverá um suporte aberto que causou o erro.

Sugiro que você abra a página no Firefox, abra o Firebug e verifique o console - ele mostrará o símbolo ausente.

Exemplo de captura de tela:

Firebug destacando o erro

MKD
fonte
2

Meu problema foi com o cache do Google Chrome. Eu testei isso executando meu aplicativo Web no Firefox e não recebi esse erro lá. Então eu decidi tentar esvaziar o cache do Google Chrome e funcionou.

Amir Al
fonte
1

Nos casos em que seu código JavaScript é minificado para uma única linha, outra causa desse erro é usar em //vez de/**/ nos seus comentários.

Ruim (comenta tudo depois de //incluir o fechamento }da sua função)

function example() { //comment console.log('TEST'); }

Bom (restringe seu comentário)

function example() { /* comment */ console.log('TEST'); }
Johan Doe
fonte
Trabalhado, Além disso, você deve usar \ "the-text \", como também refere-se a "the-text" para transmissão.
Bay
1

No meu caso, eu estava adicionando javascript dinamicamente e usando aspas duplas 2 vezes em modelos de string, então mudei o segundo para aspas simples e o erro desapareceu. Espero que ajude algumas pessoas que vêm aqui pelo mesmo motivo.

George_kane
fonte
usando addthis, eu anexei ao URL com cadeia dupla e depois mudei para aspas simples e o erro do console desapareceu
tfa
0

Eu enfrentei um problema semelhante usando a diretiva de inicialização da interface do usuário para angularjs - uib-datepicker, ao pressionar am / pm toggle.

Erro no manipulador de eventos para (desconhecido): SyntaxError: Final inesperado do JSON timepicker angular da entrada

Acontece que foi por causa do plug - in 'Trans-over' (que traduz uma palavra quando é clicada). Talvez minha resposta ajude alguém, porque não encontrei nada na internet.

OlehZiniak
fonte
0

Como é uma operação assíncrona, onreadystatechangepode ocorrer antes que o valor seja carregado no responseText, tente usar a window.setTimeout(function () { JSON.parse(xhr.responseText); }, 1000); para verificar se o erro persiste. BOL

safhac
fonte
0

Eu tive esse erro e o corrigi adicionando a proteção readyStatee statusmostrada aqui:

var xhttp = new XMLHttpRequest();
xhttp.onreadystatechange = function() {
    if (this.readyState == 4 && this.status == 200) {
          // Your code here
   }
};
Tijolo
fonte
0

se você encontrou um erro na tag Anchor, substitua "Onclick" por "href" ou "href" por "Onclick"

Harsha Annareddy
fonte
0

Definir o Acceptcabeçalho como application/jsonna solicitação funcionou para mim quando enfrentei o mesmo problema.

Stefano Populin
fonte
0

Tentar analisar um JSON vazio pode ser a causa desse erro.

Quando você receber uma resposta do servidor ou o que seja, verifique primeiro se não está vazio. Por exemplo:

function parseJSON(response) {
    if (response.status === 204 || response.status === 205) {
        return null;
    }
    return response.json();
}

Então você pode buscar com:

fetch(url, options).then(parseJSON); 
rivelbab
fonte