web-dev-qa-db-fra.com

'JSON' est une erreur indéfinie dans IE seulement

Je passe un appel AJAX à 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?

p.s. Je veux aussi que cela fonctionne dans IE7

39
KevinDeus

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

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

54
river

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 "quirks" que je suis sûr de résoudre plus que ce problème! 

27
Joe Albowicz

Mettre à jour

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

Modifications 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;
    };
}();
18
Sujay

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

1
Mghost.friend

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

0
Sanjay

JQuery 2.x n'est plus compatible avec IE 6-8. Notes de publication de JQuery 2.0 beta 2

Je sais que la principale question concerne les anciennes versions de JQuery, mais cela a été à l'origine de l'erreur. J'ai installé JQuery 1.x, compatible API avec JQuery 2.x, et ajouté le code de détection suivant:

<!--[if lt IE 9]>
 <script src="js/jquery-1.11.1.min.js"></script>
<![endif]-->
<!--[if gte IE 9]>
 <script src="js/jquery.min.js"></script>
<![endif]-->
0
arafeandur