Chrome: sintassi non rilevata Errore: fine imprevista dell'input


177

Durante il caricamento della mia pagina in Google Chrome, viene visualizzato un errore vago nella console:

Sintassi non rilevata Errore: fine imprevista dell'input

Non ho idea di cosa lo stia causando. Come farei per eseguire il debug di questo errore?


2
Controllare la risposta in uno sniffer di rete potrebbe darti un indizio. La mia ipotesi è che l' Content-lengthintestazione specifica più byte di quelli contenuti nella risposta, o forse il server in qualche modo invia HTML non valido.
martedì

2
Mancante} il più delle volte (javascript). Controlla la fine delle lezioni e delle funzioni. Prova ad aggiungere un'altra chiusura} alla fine dello script e ri-formatta automaticamente il codice. Se c'è qualche strano rientro nel tuo codice, allora da qualche parte proprio prima è molto probabilmente il punto in cui a} è scomparso.
OG Sean,

Ho riscontrato questo problema durante il caricamento errato di JS. L'ho caricato come <script>https://example.com/a.js</script>e avrebbe dovuto essere<script src="https://example.com/a.js"></script>
Daniel Apt

Ricevo questo errore oggi su Fogli Google. La mia ipotesi è che uno dei loro file JS sia così grande che venga chiuso senza caricarsi completamente. O uno dei loro server di app ha un bug e sta chiudendo la connessione http prima che il file JS sia scaricato completamente.
Teddy,

Risposte:


228

Questo particolare errore è un fatto fastidioso . Nella maggior parte dei casi il tuo JavaScript è rotto in qualche modo. Ad esempio manca uno }o qualcosa del genere.

Esempio dato, questo produrrà anche "Fine imprevista dell'input":

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

Ma la causa principale dei problemi sembra essere che l'URL JSON richiesto abbia un Content-Type di text/htmlcui Chrome apparentemente tenta di analizzare come HTML, il che si traduce in una fine imprevista dell'input a causa del fatto che i tag di immagine inclusi vengono analizzato.

Prova a impostare Content-Type su text/plainPenso che dovrebbe risolvere i problemi.

Tuttavia, V8 potrebbe fare un lavoro migliore nel dire esattamente dove l'input è terminato inaspettatamente.


3
ok Grazie mille ho rimosso la richiesta json tutti insieme e l'errore è andato via devo ancora capire cosa c'è che non va esattamente nella mia richiesta json. non avevo idea di dove iniziare il debug. se posso chiederti come hai determinato la causa principale
dlaurent86

2
Potrebbe non essere così ovvio. Ho riscontrato questo errore su JS minimizzato a causa della manipolazione del minimizer, mentre JS non minificato era perfettamente legale e valido. Sfortunatamente, Chrome mostra solo la riga in cui si verifica l'errore, che per JS minimizzato è in genere l'intero file ...
Cerin

Non tanto dove finisce l'input (perché quello sarebbe alla fine). Piuttosto, sapere cosa ci si aspettava avrebbe aiutato tonnellate.
AndrewS,

Mi ha salvato la coda. Stavo diventando terribilmente seccato dall'ambiguità. Grazie.
Cipro,

4
Ho avuto lo stesso errore, perché stavo usando JSON.parse (testo) e il valore del testo era una stringa vuota
A Khudairy,

73

Prova Firebug per Mozilla: mostrerà la posizione dei dispersi }.

http://getfirebug.com/


13
Non avevo bisogno di Firebug. La console di Firefox mi ha detto esattamente quale linea e quale personaggio mancava
Dylan Valade il

1
Nemmeno bisogno di pompieri. La console di Firefox ctrl+shift+iti dirà.
Benjamin Crouzier,

1
Attenzione, se lo script è ridotto a una sola riga enorme, aspettati che Firefox si blocchi per diversi minuti / ore / anni.
Cerin,

1
Questo è di gran lunga il modo più semplice per rintracciare questi errori di sintassi
BentOnCoding

mio dio, grazie. Sento che Chrome è molto più avanti rispetto a Firefox in termini di strumenti per sviluppatori. è incredibile come non riesca a ottenere questa piccola cosa giusta. mi ha salvato da un grosso mal di testa!
Isaiah Lee,

33

Vedi il mio caso su un'altra domanda simile :

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

JSON.parse(stringifiedJSON);

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

JSON.parse("");

2
Sì, ho avuto anche questo! Puoi risolvere facilmente fornendo "{}" invece di una stringa vuota
cronoklee il

1
Stavo ricevendo json vuoto a causa di una doppia barra in avanti in un URL (es. Localhost: 8080 // mypath / blagh) e il server stava restituendo una risposta vuota per questo.
jpierson,

1
Sono venuto qui solo per confermare questa soluzione.
Luís Assunção,

10

Ottengo questo errore quando ho omesso un carattere di parentesi graffa di chiusura ( }) nel codice JavaScript. Controlla che le parentesi graffe siano correttamente bilanciate.


10

Per la cronaca, per chiunque cerchi di trovare le varie cause di questo errore. Un attributo di dati HTML5 vuoto

data-mydata = ''

causa anche l'errore. È necessario verificare quando il valore dei dati è una stringa nulla e non includere affatto l'attributo. Va da sé che questo è in gran parte rilevante per HTML generato da script.


Non lo avrei mai capito senza di te. Stavo usando VideoJS e ho copiato l'html per il loro lettore video dalla loro pagina. Aveva un segnaposto di attributi di dati che potevi usare ma io no. Il video non si stava caricando e stavo riscontrando l'errore di cui tutti parlano. Dopo aver eliminato data-setup='{"example_option":true}' tutto ha funzionato alla grande.
Tyler Buchea,

1
@utente1002379, felice di poterti aiutare.
DroidOS

8

Il problema per me era che stavo facendo $ .ajax dataType: "json"per una richiesta POST che stava restituendo un HTTP 201 (creato) e nessun corpo di richiesta. La correzione era semplicemente rimuovere quella chiave / valore.


Ho avviato una richiesta Ajax (upload) e l'ho interrotta prima che fosse completata e ho riscontrato questo errore.
Dustin Poissant,


6

Un'altra causa di questo errore: se l'API risponde intenzionalmente senza corpo di risposta, ma risponde con un 200 OKcodice di stato anziché un 204 No Contentcodice di stato. Alcune librerie JavaScript potrebbero non rispondere bene a tipi di contenuto imprevisti quando non c'è contenuto, quindi usa il codice di stato corretto!


3

Ci sarà sicuramente una parentesi aperta che ha causato l'errore.

Ti suggerirei di aprire la pagina in Firefox, quindi aprire Firebug e controllare la console: mostrerà il simbolo mancante.

Schermata di esempio:

Firebug che evidenzia l'errore


2

Il mio problema era con la cache di Google Chrome. Ho provato questo eseguendo la mia applicazione web su Firefox e non ho riscontrato quell'errore lì. Quindi ho deciso di provare a svuotare la cache di Google Chrome e ha funzionato.


1

Nei casi in cui il tuo codice JavaScript è minimizzato su una singola riga, un'altra causa per questo errore sta usando //invece che /**/per i tuoi commenti.

Cattivo (commenta tutto dopo aver //incluso la chiusura }per la tua funzione)

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

Buono (limita il tuo commento)

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

Ha funzionato, inoltre, dovresti usare \ "the-text \" come riferimento a "the-text" anche per il casting.
Baia,

1

Nel mio caso stavo aggiungendo javascript in modo dinamico e usando virgolette doppie 2 volte nei modelli di stringa, quindi ho cambiato il secondo in virgolette singole e l'errore era sparito. Spero che possa aiutare alcune persone a venire qui per lo stesso motivo.


usando addthis ho aggiunto l'URL con doppia stringa e poi cambiato in virgoletta singola e l'errore della console è scomparso
tfa

0

Ho riscontrato un problema simile utilizzando la direttiva ui bootstrap per angularjs - uib-datepicker, quando si preme alternativamente am / pm.

Errore nel gestore eventi per (sconosciuto): SyntaxError: fine imprevista del timepicker angolare di input JSON

Si è scoperto che era a causa del plug-in 'Trans-over' (che traduce una parola quando viene cliccato). Forse la mia risposta aiuterà qualcuno, perché non ho trovato nulla su Internet.


0

Poiché si tratta di un'operazione asincrona, onreadystatechangeciò può accadere prima che il valore sia stato caricato nel responseText, provare a utilizzare a window.setTimeout(function () { JSON.parse(xhr.responseText); }, 1000); per vedere se l'errore persiste? BOL


0

Ho riscontrato questo errore e risolto aggiungendo la protezione readyStatee statusmostrato qui:

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

0

se si è verificato un errore nel tag Anchor, sostituire "Onclick" con "href" o "href" con "Onclick"


0

L'impostazione Acceptdell'intestazione su application/jsonnella richiesta ha funzionato per me quando ho riscontrato lo stesso problema.


0

Cercare di analizzare un JSON vuoto può essere la causa di questo errore.

Quando ricevi una risposta dal server o altro, controlla prima che non sia vuoto. Per esempio:

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

Quindi puoi recuperare con:

fetch(url, options).then(parseJSON); 
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.