38 votes

'JSON' est une erreur non définie dans IE uniquement

J'appelle AJAX vers un service WCF et, lorsque je transmets mes données, j'utilise JSON.stringify ().

L'appel revient et fonctionne correctement dans FF et Chrome, mais pas dans IE8. Je reçois une erreur: "JSON" n'est pas défini

suggestions?

ps je veux aussi que cela fonctionne dans IE7

53voto

anm Points 1057

Utilisez json2 pour une implémentation cohérente entre navigateurs.

https://github.com/douglascrockford/JSON-js

27voto

Joe Albowicz Points 201

J'ai eu le problème avec IE9. IE9 rendait ma page en mode "quirks", la solution consistait simplement à ajouter <!DOCTYPE html> . Cela m'a fait sortir du mode "bizarreries" que je suis sûr de résoudre plus que ce problème!

19voto

Sujay Points 884

Mise à jour

Vérifiez la bibliothèque JSON3 . Il fonctionne comme un charme.

Changements depuis JSON2

J'espère que ça aide.


J'espère que cela t'aides. Je l'ai reçu de quelques sources en ligne depuis longtemps. n'ont pas leurs liens.
Désolé de ne pas pouvoir citer de références.

 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() {
    var r = "(?:-?\\b(?:0|[1-9][0-9]*)(?:\\.[0-9]+)?(?:[eE][+-]?[0-9]+)?\\b)", k = '(?:[^\\0-\\x08\\x0a-\\x1f"\\\\]|\\\\(?:["/\\\\bfnrt]|u[0-9A-Fa-f]{4}))';
    k = '(?:"' + k + '*")';
    var s = new RegExp(
            "(?:false|true|null|[\\{\\}\\[\\]]|" + r + "|" + k + ")", "g"), t = new RegExp(
            "\\\\(?:([^u])|u(.{4}))", "g"), u = {
        '"' : '"',
        "/" : "/",
        "\\" : "\\",
        b : "\u0008",
        f : "\u000c",
        n : "\n",
        r : "\r",
        t : "\t"
    };
    function v(h, j, e) {
        return j ? u[j] : String.fromCharCode(parseInt(e, 16));
    }
    var w = new String(""), x = Object.hasOwnProperty;
    return function(h, j) {
        h = h.match(s);
        var e, c = h[0], l = false;
        if ("{" === c)
            e = {};
        else if ("[" === c)
            e = [];
        else {
            e = [];
            l = true;
        }
        for ( var b, d = [ e ], m = 1 - l, y = h.length; m = 0;)
                            delete f[i[g]];
                }
                return j.call(n, o, f);
            };
            e = p({
                "" : e
            }, "");
        }
        return e;
    };
}();
 

1voto

Mghost.friend Points 37

Pour que votre fonction fonctionne mieux dans IE, importez le code de l’analyseur JSON2 dans votre fichier, car IE par défaut ne prend pas en charge JSON.Stringify() .

On peut le trouver ici

0voto

Sanjay Points 9

Dans IE, ouvrez les paramètres de la vue de compatibilité et supprimez l'hôte local de la zone de liste pour les "Sites Web que vous avez ajoutés à la vue de compatibilité". Cela a fonctionné pour moi.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X