Errore JavaScript (errore di sintassi non rilevato: fine imprevista dell'input)


211

Ho del codice JavaScript che funziona in FireFox ma non in Chrome o IE.

Nella console JS di Chrome viene visualizzato il seguente errore:

"Uncaught SyntaxError: fine imprevista dell'input".

Il codice JavaScript che sto usando è:

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

Dice che l'errore è sull'ultima riga che è });


2
So che Chrome V8, per un DELETEserver sul quale, se la risposta fosse un 200 successanziché un 204 success - no response , otterrei anche questo errore. Fai attenzione nel caso in cui qualcuno lo ottenga.
Eric D. Johnson,

Risposte:


402

Aggiungi un secondo });.

Se correttamente indentato, il codice legge

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

Non hai mai chiuso l'esterno $(function() {.


278
La lezione è, indentare sempre il codice (e indentarlo correttamente).
SLaks

4
Oh amico, vorrei che il mio VIM avesse rilevato quell'errore di sintassi. Non riesco a credere quanto tempo a volte spreco a volte con errori di sintassi trascurati.
HeyWatch, questo

4
La lezione è, usa sempre un buon editor con buoni plugin, in grado di rilevare l'abbinamento tra parentesi, evidenziarlo o persino riparare i problemi.
Sławomir Lenart,

1
@HeyWatchThis Potresti provare Syntastic per Vim.
Nathan Long,

1
Uso neomake per vim / neovim, configurato per eseguire jshint ogni volta che salvo un file JavaScript. Se ho errori di sintassi, vedrò i simboli di avvertenza / errore nella grondaia di vim / neovim. Quando posiziono il cursore su quella riga, la riga di comando vim / neovim mostrerà un messaggio che dice qual è l'errore.
trusktr,

89

Nel mio caso, stavo cercando di analizzare un JSON vuoto:

JSON.parse(stringifiedJSON);

In altre parole, quello che è successo è stato il seguente:

JSON.parse("");

3
Questo, sfortunatamente, include $.parseJSONjquery 1.11.2
Nasser Al-Wohaibi

37

http://jsbeautifier.org/ è utile per indentare il tuo codice JS minimizzato.

Inoltre, con Google Chrome puoi utilizzare "pretty print". Guarda lo screenshot di esempio qui sotto che mostra jquery.min.jsda Stack Overflow ben rientrato direttamente dal mio browser :)

inserisci qui la descrizione dell'immagine


14

Formattando un po 'il codice, hai chiuso solo la funzione di passaggio interno. Non hai chiuso le parti esterne, contrassegnate di seguito:

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

5

Nel mio caso, alla fine è stato un semplice problema di doppie virgolette nel mio bookmarklet , ricorda di usare solo virgolette singole sui bookmarklet. Nel caso questo aiuti qualcuno.


3

Ho avuto questo errore quando stavo provando a scrivere un bookmarklet javascript. Non riuscivo a capire cosa lo causasse. Ma alla fine ho provato a codificare l'URL del bookmarklet, tramite il seguente sito Web: http://mrcoles.com/bookmarklet/ e quindi l'errore è andato via, quindi deve essere stato un problema con alcuni caratteri nel codice javascript interpretati come URL speciale personaggi di controllo.


2
Ho avuto un // commento nella mia js, che ha commentato un po 'più di quanto volessi da quando incollarlo nell'URL del bookmarklet ha reso l'intero codice un one-liner e // era nel mezzo del codice.
mflodin,

La rimozione dei commenti ha risolto anche per me.
Alex,

3

Questo errore è principalmente causato da chiamate ajax restituite vuote quando si tenta di analizzare un JSON vuoto.

Per risolvere questo test se i dati restituiti sono vuoti

$.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

Nel mio caso, è stato causato dalla mancanza (0)di javascript:void(0)un'ancora.


0

Ho ottenuto questo dato che avevo un commento in un file che stavo aggiungendo al mio JS, motivo davvero imbarazzante per quello che stava succedendo, anche se quando VMfai clic sul file che è pre-renderizzato e rileva l'errore, scoprirai esattamente cosa l'errore era, nel mio caso era semplicemente decommentare il codice che stavo usando.


0

Ho anche avuto questo errore che puntava alla fine dell'ultimo blocco di script in una pagina, solo per rendermi conto che l'errore era effettivamente facendo clic su un elemento con un onclick="pagename"invece di onclick="window.location='pagename'". Non è sempre una parentesi mancante!

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.