web-dev-qa-db-fra.com

Objet JSON non défini dans Internet Explorer 8

Actuellement, je suis en train d'écrire un fichier JavaScript et j'ai la ligne suivante:

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

le résultat est défini juste au-dessus de cette ligne. Le problème que je rencontre est que IE8 (c'est-à-dire uniquement IE8) me signale que JSON est indéfini. Je ne sais pas trop quoi en penser, car si j'ai bien compris, IE8 est un navigateur qui prend en charge le support JSON. Est-ce que quelqu'un a une idée de ce qui pourrait se passer?

70
keybored

Assurez-vous que vous êtes bien en mode IE 8 en utilisant la méthode préférée, un doctype de normes ...

<!DOCTYPE html>

... ou la méthode non désirée, la balise méta/en-tête X-UA-Compatible ...

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

Voir Définition de la compatibilité des documents pour plus d'informations.

116
Andy E

Utiliser jQuery.parseJSON a résolu ce problème pour moi, si vous utilisez déjà JQuery.

9
Chen

D'autres éléments que l'absence de doctype ou d'un faux doctype, ou une erreur avec la syntaxe html, forceront IE à utiliser des modes de document différents de ceux que vous attendez.

J'utilisais un "" simple dans un document de test et l'absence de balise TITLE en tant qu'enfant de la balise HEAD sous window.JSON devenait indéfinie.

Rappelez-vous toujours qu'il est préférable de tester la ressource par rapport à la version du navigateur. De plus, si vos utilisateurs peuvent utiliser Internet Explorer avec l’émulation de modes de document, il est préférable de disposer d’un morceau de code fournissant les fichiers JSON.parse et JSON.stringify lorsque les natifs ne sont pas définis.

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

Peut se produire malgré <!DOCTYPE html> si le codage de page est UTF-8 avec BOM (marque d'ordre des octets). Essayez d’enregistrer le fichier en tant que UTF-8 sans BOM, en utilisant un éditeur de texte approprié.

2
user126083

mettre le code suivant dans votre fichier js;

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