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


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() {.


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

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


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

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.


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.


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

3

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


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.


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!

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.