wake-up-neo.net

JSON-Objekt in Internet Explorer 8 nicht definiert

Momentan schreibe ich eine JavaScript-Datei und habe folgende Zeile:

var res = "JSON=" + JSON.stringify(result);

ergebnis wird gerade oberhalb dieser Linie gesetzt. Das Problem, das ich habe, ist, dass IE8 (nur IE8) mir berichtet, dass JSON irgendwie undefiniert ist. Ich bin nicht sicher, was ich davon halten soll, da IE8, wie ich es verstand, ein Browser ist, der JSON-Unterstützung implementiert. Hat jemand eine Idee, was los sein könnte?

70
keybored

Stellen Sie sicher, dass Sie sich im Modus IE 8 befinden, indem Sie die bevorzugte Methode, einen Standard-Doctype, verwenden.

<!DOCTYPE html>

... oder die unerwünschte Methode, der X-UA-Compatible Meta-Tag/Header ...

<meta http-equiv="X-UA-Compatible" content="IE=Edge" />

Weitere Informationen finden Sie unter Dokumentkompatibilität definieren .

116
Andy E

Mit jQuery.parseJSON wurde dieses Problem gelöst, falls Sie JQuery bereits verwenden.

9
Chen

Andere Dinge, bei denen es keinen Doctype oder einen falschen Doctype gibt oder einen Fehler in der HTML-Syntax, zwingen IE, andere Dokumentmodi zu verwenden, als Sie erwarten.

Ich habe ein einfaches "" in einem Testdokument verwendet und das Fehlen des TITLE-Tags als untergeordnetes Element des HEAD -Tags machte window.JSON undefiniert.

Denken Sie immer daran, dass es besser ist, die Ressource mit der Browser-Version zu testen. Wenn Ihre Benutzer IEs mit der Emulation von Dokumentmodi verwenden können, ist es besser, einen Code zu verwenden, der JSON.parse und JSON.stringify bereitstellt, wenn Eingeborene nicht definiert sind.

6
Thadeu de Paula
function parseJson(jsonString) {
    if ($.browser.msie && $.browser.version < 8) {
        return eval('(' + jsonString + ')');
    }
    else {
        return JSON.parse(jsonString);
    }
}
3
mq3w

Kann trotz <!DOCTYPE html> vorkommen, wenn die Seitencodierung UTF-8 mit BOM (Byte Order Mark) ist. Speichern Sie die Datei mit einem geeigneten Texteditor als UTF-8 ohne BOM.

2
user126083

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;
 };
0
atom217