Unerwartetes token u in JSON an position 0 (aber nur manchmal)
Ok, dies ist also nur ein Teil von meinem code, und funktioniert tatsächlich wie es soll.
var jqxhr = $.getJSON( "main.json", function(data) {
return data;
});
var json;
window.onload = function() {
var jsonTxt = jqxhr.responseText;
json = JSON.parse(jsonTxt);
....
}
Aber jedem 10ten Versuch oder so bekomme ich die folgende Fehlermeldung:
Uncaught SyntaxError: Unexpected token u in JSON at position 0
at JSON.parse (<anonymous>)
at window.onload (profile.js:8)
Es ist wirklich ärgerlich, weil Sie verlassen meine Seite leer. Ich denke, es hat etwas mit mir zu tun versuchen zu Parsen von JSON-falschen - oder so etwas. Ich weiß wirklich nicht, und ich freue mich auf jede Art von Antwort dazu führen könnte, dass mich das Update. Danke.
- Es ist sehr wahrscheinlich ein timing-Problem. wenn
onload
feuert, bevor$.getJSON
abgeschlossen ist, dannresponseText
wird nicht auf gültige JSON. Vielleicht möchten Sie die Analyse insuccess
callback (das Dritte optionale argument). Hängt davon ab, was du tun willst...
Du musst angemeldet sein, um einen Kommentar abzugeben.
Dass unerwartete "u" ist der erste Buchstabe der Zeichenfolge "undefined". Es geschieht, weil Ihr zwei asynchrone Vorgänge (z.B. das laden der JSON-und be-Fenster) das Rennen bis zur Fertigstellung, und wenn die JSON nicht schnell genug geladen, die
window.onload
Methode wird versucht, den JSON-string Parsen, die ist nicht geladen aber.Einer Lösung, um die JSON-laden innerhalb der
onload
auch handler. Außerdem, der ganze Sinn dergetJSON
ist, dass es bereits parst die Antwort für Sie als JSON-Objekt, so gibt es keine Notwendigkeit fürJSON.parse()
:json = JSON.parse(jsonTxt);
console.log(json)
statt des Kommentars), und eine "main.json" ich schrieb, für mich gearbeitet. Es ist etwas anderes mit im Spiel ist.main.json
erfolgreich geladen wird) Gegeben, was wenig Zusammenhang haben wir zu gehen, hier kann ich nichts sagen, spezifischer aber leider. Nur stellen Sie sicher, Sie haben alle asynchronen Vorgänge in der angegebenen Reihenfolge, und nicht zwei von Ihnen gleichzeitig, wenn man abhängig ist das Ergebnis der anderen.Legen Sie einen try-catch-block, in dem die JSON.parse() aufgerufen wird.
Ist es möglich, dass der text selbst ist nicht JSON.
Zum Beispiel...
Ich denke, das ist das Problem, weil, wenn Antwort text ist nicht definiert, das Zeichen " u " an position 0 befindet. Also JSON.parse() ist die Arbeit mit einem string. Kein javascript-object-notation-text-Datei.