Erro de JavaScript (Untaught SyntaxError: final de entrada inesperado)

211

Eu tenho algum código JavaScript que funciona no FireFox, mas não no Chrome ou IE.

No Chrome JS Console, recebo o seguinte erro:

"SyntaxError não capturado: final de entrada inesperado".

O código JavaScript que estou usando é:

<script>
 $(function() {
 $("#mewlyDiagnosed").hover(function() {
    $("#mewlyDiagnosed").animate({'height': '237px', 'top': "-75px"});
 }, function() {
    $("#mewlyDiagnosed").animate({'height': '162px', 'top': "0px"});
 });
</script>

Diz que o erro está na última linha que é });

Phillip
fonte
2
Eu sei que o V8 do Chrome, para um DELETEno servidor, se a resposta fosse 200 em successvez de 204, success - no response eu receberia esse erro também. Apenas fique alerta caso alguém esteja recebendo isso também.
Eric D. Johnson

Respostas:

401

Adicione um segundo });.

Quando recuado corretamente, seu código lê

$(function() {
    $("#mewlyDiagnosed").hover(function() {
        $("#mewlyDiagnosed").animate({'height': '237px', 'top': "-75px"});
    }, function() {
        $("#mewlyDiagnosed").animate({'height': '162px', 'top': "0px"});
    });
MISSING!

Você nunca fechou o exterior $(function() {.

SLaks
fonte
278
A lição é: sempre recue seu código (e recue-o corretamente).
Slaks
4
Ah, cara, eu gostaria que meu VIM tivesse capturado esse erro de sintaxe. Não acredito quanto tempo acabo perdendo às vezes com erros de sintaxe descuidados.
precisa saber é o seguinte
4
A lição é: sempre use um bom editor com bons plugins, que podem detectar o pareamento de parênteses, destacá-lo ou até mesmo reparar problemas.
Sławomir Lenart
1
@HeyWatchThis Você pode tentar o Syntastic for Vim.
Nathan Long
1
Uso o neomake para vim / neovim, configurado para executar o jshint toda vez que salvo um arquivo JavaScript. Se eu tiver erros de sintaxe, verei símbolos de aviso / erro na sarjeta do vim / neovim. Quando coloco o cursor nessa linha, a linha de comando vim / neovim mostra uma mensagem dizendo qual é o erro.
trusktr
89

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
3
Infelizmente, isso inclui o $.parseJSONjquery 1.11.2
Nasser Al-Wohaibi
37

http://jsbeautifier.org/ é útil para recuar seu código JS minificado.

Além disso, com o Google Chrome, você pode usar "impressão bonita". Veja a captura de tela de exemplo abaixo, mostrando jquery.min.jsdo Stack Overflow bem recuado diretamente do meu navegador :)

insira a descrição da imagem aqui

Hugo
fonte
14

Ao formatar um pouco o código, você apenas fechou a função de foco interno. Você não fechou as partes externas, marcadas abaixo:

$(// missing closing)
 function() { // missing closing }
     $("#mewlyDiagnosed").hover(
        function() {
            $("#mewlyDiagnosed").animate({'height': '237px', 'top': "-75px"});
        }, 
        function() {
            $("#mewlyDiagnosed").animate({'height': '162px', 'top': "0px"});
        });
hvgotcodes
fonte
5

No meu caso, acabou sendo uma questão simples de aspas duplas no meu bookmarklet , lembre-se de usar apenas aspas simples nos bookmarklets. Caso isso ajude alguém.

Yëco
fonte
3

Eu recebi esse erro ao tentar escrever um bookmarklet javascript. Eu não conseguia descobrir o que estava causando isso. Mas, eventualmente, tentei URL que codifica o bookmarklet, através do seguinte site: http://mrcoles.com/bookmarklet/ e o erro desapareceu, por isso deve ter sido um problema com certos caracteres no código javascript sendo interpretados como URL especial caracteres de controle.

user280109
fonte
2
Eu tinha um // comentário no meu js, que comentava um pouco mais do que eu queria, pois colar no URL do bookmarklet transformou todo o código em uma linha e o // estava no meio do código.
precisa saber é
A remoção de comentários também corrigia isso para mim.
Alex
3

Esse erro é causado principalmente por chamadas ajax retornadas vazias, ao tentar analisar um JSON vazio.

Para resolver este teste se os dados retornados estiverem vazios

$.ajax({
    url: url,
    type: "get",
    dataType: "json",
    success: function (response) {

        if(response.data.length == 0){
            // EMPTY
        }else{
            var obj =jQuery.parseJSON(response.data);
            console.log(obj);
        }
    }
});
Jimmy Obonyo Abor
fonte
3

No meu caso, foi causado por um ausente (0)em javascript:void(0)em uma âncora.

Sam
fonte
0

Entendi isso desde que tive um comentário em um arquivo que estava adicionando ao meu JS, motivo realmente estranho para o que estava acontecendo - embora, ao clicar no VMarquivo pré-renderizado e detectar o erro, você descubra exatamente o que erro foi, no meu caso, foi simplesmente descomentar algum código que eu estava usando.

Jack Hales
fonte
0

Também recebi esse erro apontando para o final do último bloco de script em uma página, apenas para perceber que o erro era realmente ao clicar em um elemento com um ao onclick="pagename"invés de onclick="window.location='pagename'". Nem sempre é um suporte ausente!

justanotherguy
fonte