Derzeit schreibe ich eine JavaScript-Datei und habe die folgende Zeile:
var res = "JSON=" + JSON.stringify(result);
Das Ergebnis wird direkt über dieser Linie gesetzt. Das Problem, das ich habe, ist, dass IE8 (also nur IE8) mir meldet, dass JSON irgendwie undefiniert ist. Ich bin mir nicht sicher, was ich davon halten soll, da IE8 nach meinem Verständnis ein Browser ist, der JSON-Unterstützung implementiert. Hat jemand eine Idee, was los sein könnte?
javascript
html
json
internet-explorer-8
Schlüsselbohrung
quelle
quelle
Antworten:
Stellen Sie sicher, dass Sie sich tatsächlich im IE 8-Modus befinden, indem Sie die bevorzugte Methode verwenden, einen Standard-Doctype ...
... oder die unerwünschte Methode, das
X-UA-Compatible
Meta-Tag / Header ...<meta http-equiv="X-UA-Compatible" content="IE=EDGE" />
Weitere Informationen finden Sie unter Definieren der Dokumentkompatibilität .
quelle
JSON =
(der Beispielcode, den Sie in der Frage geschrieben haben, ist ein guter Anfang - verwenden Sieeval
?).Die Verwendung von jQuery.parseJSON hat dies für mich gelöst, falls Sie bereits JQuery verwenden.
quelle
Andere Dinge, bei denen kein oder ein falscher Doctype oder ein Fehler in der HTML-Syntax vorliegt, zwingen den IE, andere Dokumentmodi als erwartet zu verwenden.
Ich habe einfaches "" in einem Testdokument verwendet und das Fehlen des TITLE-Tags als untergeordnetes Element des HEAD-Tags hat window.JSON undefiniert.
Denken Sie immer daran, dass es besser ist, die Ressource anhand der Browserversion zu testen. Und wenn Ihre Benutzer IE mit Emulation von Dokumentmodi verwenden können, ist es besser, wenn Sie einen Code haben, um JSON.parse und JSON.stringify bereitzustellen, wenn Eingeborene undefiniert sind.
quelle
function parseJson(jsonString) { if ($.browser.msie && $.browser.version < 8) { return eval('(' + jsonString + ')'); } else { return JSON.parse(jsonString); } }
quelle
Kann passieren, obwohl
<!DOCTYPE html>
die SeitencodierungUTF-8
mitBOM
(Byte Order Mark) ist. Versuchen Sie, die Datei mit einem geeigneten Texteditor wieUTF-8
ohne zu speichernBOM
.quelle
Fügen Sie folgenden Code in Ihre js-Datei ein.
var JSON = JSON || {}; // implement JSON.stringify serialization JSON.stringify = JSON.stringify || function (obj) { var t = typeof (obj); if (t != "object" || obj === null) { // simple data type if (t == "string") obj = '"'+obj+'"'; return String(obj); } else { // recurse array or object var n, v, json = [], arr = (obj && obj.constructor == Array); for (n in obj) { v = obj[n]; t = typeof(v); if (t == "string") v = '"'+v+'"'; else if (t == "object" && v !== null) v = JSON.stringify(v); json.push((arr ? "" : '"' + n + '":') + String(v)); } return (arr ? "[" : "{") + String(json) + (arr ? "]" : "}"); } }; // implement JSON.parse de-serialization JSON.parse = JSON.parse || function (str) { if (str === "") str = '""'; eval("var p=" + str + ";"); return p; };
quelle
eval
, der fehlerhaften Formatierung und dem Rückgriff auf das Parsen ist der Kicker, dass der Stringifizierer nicht einmal funktioniert. Es gibt das falsche Ergebnis für jede Zeichenfolge zurück, die ein doppeltes Anführungszeichen, eine neue Zeile, einen Backslash oder wahrscheinlich viele andere Dinge enthält.Überprüfen Sie die jQuery-Version. jQuery 2.0 beendet die Unterstützung für IE 6, 7 und 8 . Verwenden Sie stattdessen jQuery 1.x, das weiterhin offiziell unterstützt wird. Sie können diesen Code verwenden.
<script src="http://code.jquery.com/jquery-1.9.0.js"></script> <script src="http://code.jquery.com/jquery-migrate-1.2.1.js"></script>
Lesen Sie mehr über jquery migrate .
Wenn dies nicht funktioniert, lesen Sie diesen Artikel .
quelle
JSON
globalen, der nicht Teil von jQuery ist. Diese Antwort ist völlig irrelevant.In meinem Fall lag der undefinierte Fehler darin, dass mir eine JSON-Bibliothek fehlte.
Sie können ein JSON-Objekt wie folgt hinzufügen (ersetzen Sie den relativen Pfad durch Ihren eigenen Pfad):
<script> if (typeof window.JSON == 'undefined') { document.write('<script src="../scripts/json2.js"><\/script>'); } </script>
Für die json2-Bibliothek: http://cdnjs.com/libraries/json2/
Es gibt auch eine json3-Bibliothek: http://cdnjs.com/libraries/json3/
Dann können Sie in Ihrem Code darauf verweisen:
var array = []; array[1] = "apple"; array[2] = "orange"; alert(JSON.stringify(array));
quelle