Beim Laden meiner Seite in Google Chrome wird in der Konsole ein vager Fehler angezeigt:
Nicht erfasster SyntaxError: Unerwartetes Ende der Eingabe
Ich habe keine Ahnung, was es verursacht. Wie würde ich vorgehen, um diesen Fehler zu debuggen?
debugging
google-chrome
syntax-error
dlaurent86
quelle
quelle
Content-length
Header mehr Bytes angibt, als die Antwort enthält, oder dass der Server möglicherweise ungültiges HTML sendet.<script>https://example.com/a.js</script>
und es hätte sein sollen<script src="https://example.com/a.js"></script>
Antworten:
Dieser besondere Fehler ist eine ärgerliche Tatsache v8. In den meisten Fällen ist Ihr JavaScript auf irgendeine Weise kaputt. Zum Beispiel fehlt ein
}
oder so etwas.Beispiel gegeben, dies ergibt auch "Unerwartetes Ende der Eingabe":
Die Hauptursache für die Probleme scheint jedoch zu sein, dass die angeforderte JSON-URL einen Inhaltstyp hat, von
text/html
dem Chrome anscheinend versucht, ihn als HTML zu analysieren, was dann zu einem unerwarteten Ende der Eingabe führt, da die enthaltenen Bild-Tags vorhanden sind analysiert.Versuchen Sie, den Inhaltstyp auf
text/plain
Ich denke, er sollte die Probleme beheben.Trotzdem könnte V8 einen besseren Job machen, wenn man genau sagt, wo die Eingabe unerwartet endete.
quelle
Versuchen Sie Firebug für Mozilla - es zeigt die Position der Vermissten
}
.http://getfirebug.com/
quelle
ctrl+shift+i
wird es Ihnen sagen.Siehe meinen Fall zu einer anderen ähnlichen Frage :
quelle
Ich erhalte diesen Fehler, wenn ich ein schließendes Klammerzeichen (
}
) im JavaScript-Code ausgelassen habe . Überprüfen Sie, ob Ihre Zahnspangen richtig ausbalanciert sind.quelle
Für die Aufzeichnung, für jeden, der versucht, die verschiedenen Ursachen für diesen Fehler zu finden. Ein leeres HTML5-Datenattribut
verursacht auch den Fehler. Sie sollten überprüfen, ob der Datenwert eine Nullzeichenfolge ist und das Attribut überhaupt nicht enthalten. Es versteht sich von selbst, dass dies für skriptgeneriertes HTML weitgehend relevant ist.
quelle
data-setup='{"example_option":true}'
alles super geklappt.Das Problem für mich war, dass ich $ .ajax
dataType: "json"
für eine POST-Anfrage ausführte , die ein HTTP 201 (erstellt) und keinen Anfragetext zurückgab. Die Lösung bestand darin, diesen Schlüssel / Wert einfach zu entfernen.quelle
JSHint ist gut darin, die Position fehlender Klammern oder einer schlechten Syntax zu finden.
quelle
Eine weitere Ursache für diesen Fehler: Wenn Ihre API absichtlich ohne Antworttext antwortet, jedoch mit einem
200 OK
Statuscode anstelle eines204 No Content
Statuscodes. Einige JavaScript-Bibliotheken reagieren möglicherweise nicht gut auf unerwartete Inhaltstypen, wenn kein Inhalt vorhanden ist. Verwenden Sie daher den richtigen Statuscode!quelle
Es wird definitiv eine offene Klammer geben, die den Fehler verursacht hat.
Ich würde vorschlagen, dass Sie die Seite in Firefox öffnen, dann Firebug öffnen und die Konsole überprüfen - es wird das fehlende Symbol angezeigt.
Beispiel-Screenshot:
quelle
Mein Problem war mit dem Google Chrome-Cache. Ich habe dies getestet, indem ich meine Webanwendung unter Firefox ausgeführt habe, und habe diesen Fehler dort nicht erhalten. Also habe ich beschlossen, den Cache von Google Chrome zu leeren, und es hat funktioniert.
quelle
In Fällen, in denen Ihr JavaScript-Code auf eine einzelne Zeile reduziert ist, wird
//
anstelle von eine andere Ursache für diesen Fehler verwendet/**/
Ihrer Kommentare .Schlecht (kommentiert alles nach
//
dem Schließen}
für Ihre Funktion aus)Gut (beschränkt Ihren Kommentar)
quelle
In meinem Fall habe ich Javascript dynamisch hinzugefügt und zweimal doppelte Anführungszeichen in Zeichenfolgenvorlagen verwendet, sodass ich die zweite in einfache Anführungszeichen geändert habe und der Fehler behoben war. Ich hoffe, es wird einigen Leuten helfen, die aus dem gleichen Grund hierher kommen.
quelle
Ich hatte ein ähnliches Problem mit der Verwendung der UI-Bootstrap-Direktive für anglejs - uib-datepicker, wenn ich am / pm umschalte.
Es stellte sich heraus, dass es am Plugin 'Trans-over' lag (das ein Wort übersetzt, wenn es angeklickt wird). Vielleicht hilft meine Antwort jemandem, weil ich im Internet nichts gefunden habe.
quelle
Da es sich um eine asynchrone Operation handelt, die
onreadystatechange
möglicherweise vor dem Laden des Werts in den responseText auftritt, versuchen Sie mit a,window.setTimeout(function () { JSON.parse(xhr.responseText); }, 1000);
um festzustellen, ob der Fehler weiterhin besteht. BOLquelle
Ich hatte diesen Fehler und habe ihn behoben, indem ich den Schutz hinzugefügt
readyState
undstatus
hier gezeigt habe:quelle
Wenn beim Anchor-Tag ein Fehler aufgetreten ist, ersetzen Sie einfach "Onclick" durch "href" oder "href" durch "Onclick".
quelle
Das Setzen des
Accept
Headers aufapplication/json
in der Anfrage hat bei mir funktioniert, als ich auf dasselbe Problem stieß.quelle
Der Versuch, einen leeren JSON zu analysieren, kann die Ursache für diesen Fehler sein.
Wenn Sie eine Antwort vom Server oder was auch immer erhalten, überprüfen Sie zuerst, ob diese nicht leer ist. Beispielsweise:
Dann können Sie holen mit:
quelle