Ich versuche etwas HTML / CSS / Javascript zu lernen, also schreibe ich mir selbst ein Lehrprojekt.
Die Idee war, ein Vokabular in einer JSON-Datei zu haben, das dann in eine Tabelle geladen wird. Es gelang mir, die Datei zu laden und einen ihrer Werte auszudrucken. Danach begann ich, den Code zu schreiben, um die Werte in die Tabelle zu laden.
Danach bekam ich einen Fehler, also entfernte ich den gesamten Code, den ich geschrieben hatte, und ließ nur eine Zeile übrig (dieselbe Zeile, die zuvor funktioniert hatte) ... nur der Fehler ist noch vorhanden.
Der Fehler ist wie folgt:
Uncaught SyntaxError: Unexpected token o
(anonymous function)script.js:10
jQuery.Callbacks.firejquery-1.7.js:1064
jQuery.Callbacks.self.fireWithjquery-1.7.js:1182
donejquery-1.7.js:7454
jQuery.ajaxTransport.send.callback
Mein Javascript-Code ist in einer separaten Datei enthalten und lautet einfach wie folgt:
function loadPageIntoDiv(){
document.getElementById("wokabWeeks").style.display = "block";
}
function loadWokab(){
//also tried getJSON which threw the same error
jQuery.get('wokab.json', function(data) {
var glacier = JSON.parse(data);
});
}
Und meine JSON-Datei hat gerade Folgendes:
[
{
"english": "bag",
"kana": "kaban",
"kanji": "K"
},
{
"english": "glasses",
"kana": "megane",
"kanji": "M"
}
]
Jetzt wird der Fehler in Zeile 11 gemeldet, die die var glacier = JSON.parse(data);
Zeile ist.
Wenn ich die JSON-Datei entferne, wird die Fehlermeldung "GET http: //.../wokab.json 404 (Not Found)" angezeigt, damit ich weiß, dass sie geladen wird (oder zumindest versucht wird).
quelle
var glacier = data;
sollte ausreichen.Uncaught SyntaxError: Unexpected token I
weil Python codiertjson.dumps([float('inf'),float('nan')]) == '[Infinity, NaN]'
Antworten:
Es sieht so aus, als würde jQuery den Datentyp erraten. Es führt die JSON-Analyse durch, obwohl Sie getJSON () nicht aufrufen. Wenn Sie dann versuchen, JSON.parse () für ein Objekt aufzurufen, wird der Fehler angezeigt.
Weitere Erklärungen finden Sie in der Antwort von Aditya Mittal .
quelle
JSON.parse
ein Objekt haben, wird das "Unerwartete Token o" einfach ausgelöst, weil es versucht zu analysierenobj_to_parse.toString()
, was ist[object Object]
. Versuchen Sie esJSON.parse('[object Object]');
;)dataType
(warum auch immer), verwendet es denContent-type
HTTP-Header der Antwort, um zu bestimmen, um welche Art von Daten es sich handelt, und analysiert sie, wenn es sich um Daten handelt, die von jQuery erkannt werden.Das Problem ist sehr einfach
Sie analysieren es zweimal.
get
verwendet dasdataType='json'
, sodass die Daten bereits im JSON-Format vorliegen. Verwenden Sie$.ajax({ dataType: 'json' ...
diese Option, um den zurückgegebenen Datentyp spezifisch festzulegen!quelle
Wenn der Antwortheader text / html ist, müssen Sie ihn analysieren, und wenn der Antwortheader application / json lautet, wird er bereits für Sie analysiert.
Analysierte Daten vom JQuery Success Handler für Text- / HTML-Antworten:
Analysierte Daten vom JQuery Success Handler für die Anwendungs- / JSON-Antwort:
quelle
Ein weiterer Hinweis auf
Unexpected token
Fehler. Es gibt zwei Hauptunterschiede zwischen Javascript-Objekten und json:Korrigieren Sie JSON
Fehler JSON 1
Fehler JSON 2
Anmerkung
Dies ist keine direkte Antwort auf diese Frage. Aber es ist eine Antwort auf
Unexpected token
Fehler. Es kann also anderen helfen, die sich mit dieser Frage auseinandersetzen.quelle
Die Antwort ist einfach bereits analysiert, Sie müssen sie nicht erneut analysieren. Wenn Sie es erneut analysieren, erhalten Sie ein "unerwartetes Token o". Sie müssen jedoch in Ihrer Anfrage den Datentyp angeben, um vom Typ zu sein
dataType='json'
quelle
Ich hatte gerade ein ähnliches Problem und meine Lösung könnte helfen. Ich verwende einen Iframe, um eine XML-Datei hochzuladen und in JSON zu konvertieren und sie hinter den Kulissen zurückzusenden. Chrome fügte den eingehenden Daten Müll hinzu, der nur zeitweise angezeigt wurde und das "Ungefangene SyntaxError: Unerwartetes Token o" verursachte. Error.
Ich habe wie folgt auf die Iframe-Daten zugegriffen:
Das funktionierte gut auf localhost, aber als ich es auf den Server hochlud, funktionierte es nicht mehr nur mit einigen Dateien und nur beim Laden der Dateien in einer bestimmten Reihenfolge. Ich weiß nicht wirklich, was es verursacht hat, aber das hat es behoben. Ich habe die obige Zeile in geändert
Einmal bemerkte ich etwas Müll in der HTML-Antwort.
Lange Rede, kurzer Sinn, überprüfen Sie Ihre rohen HTML-Antwortdaten, und Sie könnten etwas auftauchen.
quelle
Dies passiert auch, wenn Sie vergessen, das
await
Schlüsselwort für eine Methode zu verwenden, die JSON-Daten zurückgibt.Zum Beispiel:
wird wegen des Fehlens einen Fehler auslösen
await
. Was tatsächlich zurückgegeben wird, ist einPromise
[Objekt], keinstring
.Um dies zu beheben, fügen Sie einfach "Warten" hinzu, wie Sie es sollten:
Dies sollte ziemlich offensichtlich sein, aber der Fehler wird aufgerufen
JSON.parse
, sodass es leicht zu übersehen ist, wenn zwischen Ihrem Methodenaufruf und dem Aufruf ein gewisser Abstand besteht .await
JSON.parse
quelle
Stellen Sie sicher, dass Ihre JSON-Datei vorher oder nachher keine nachgestellten Zeichen enthält. Vielleicht eine nicht druckbare? Vielleicht möchten Sie Folgendes versuchen:
quelle
Wenn tempActivity die Daten fummelt, die den Fehler "SyntaxError: Unerwartetes Token o in JSON an Position 1 - Stapelüberlauf" erzeugen.
quelle