58 votes

JSON.stringify () est-il pris en charge par IE 8?

J'ai besoin d'utiliser:

JSON.stringify()

ce qui devrait être pris en charge par Chrome, Safari et Firefox. Je pense que IE8 a également le soutien de l'objet JSON. Je pense que IE7 et 6 ne sont pas, je fais donc ceci:

<!--[if lt IE 8]>
    <script src="http://www.json.org/json2.js"></script>
<![endif]-->

donc, je pense que cela va importer le JavaScript externe seulement si IE6 et 7. J'ai regardé l'URL où le script est hébergé, ils sont compris que si la version de IE est inférieure à 9:

http://code.google.com/p/html5shiv/
<!--[if lt IE 9]>
    <script src="http://www.json.org/json2.js"></script>
<![endif]-->

dois-je donc être notamment présent pour IE 8?

66voto

Lee Whitney Points 3570

Pour répondre à la question dans le titre directement, oui IE8 soutient JSON.stringify() nativement.

IE8 est la première version de IE pour obtenir ce soutien, et la fonctionnalité est expliquée en détail par l'équipe de dev ici: http://blogs.msdn.com/b/ie/archive/2008/09/10/native-json-in-ie8.aspx

La réponse à la deuxième partie de la question, oui vous devez inclure d'autres fonctionnalités pour IE6/IE7. Quelque chose comme Modernizr, il est facile de vérifier cela.

Notez également que si l'utilisateur est en mode de Compatibilité IE8, l'objet JSON ne sera pas disponible.

31voto

ggc Points 261

Si vous essayez JSON.stringify() utilisant IE 8, vous devez vous assurer qu'il ne fonctionne pas en mode de compatibilité. Voir JSON non défini (Internet Explorer 8)

Vous aurez besoin d'ajouter

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

à votre page

16voto

Evan Plaice Points 5677

Il y a une meilleure solution...

Cela ne veut pas répondre directement à votre question, il offre une solution complète à votre problème plutôt.

Le jquery json bibliothèque fournit un wrapper qui utilise le natif de l'objet JSON mise en œuvre si elle est disponible et retombe à son propre JSON mise en œuvre si elle n'est pas. Sens il va travailler dans n'importe quel navigateur.

Voici l'Exemple d'Utilisation de la page d'accueil:

var thing = {plugin: 'jquery-json', version: 2.3};

var encoded = $.toJSON( thing );
// '{"plugin":"jquery-json","version":2.3}'
var name = $.evalJSON( encoded ).plugin;
// "jquery-json"
var version = $.evalJSON(encoded).version;
// 2.3

L'utilisation est très simple: la méthode toJSON stringifies la JS source; evalJSON convertit la chaîne JSON données à des objets JavaScript.

Vous regardez le code source, la mise en œuvre est étonnamment simple, mais il fonctionne très bien. Je l'ai utilisé personnellement dans quelques projets.

Il n'y a pas besoin de faire de la détection du navigateur si cela fonctionne dans tous les navigateurs.

10voto

atom217 Points 364

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

9voto

saluce Points 5086

Vous n'avez pas besoin d'utiliser des conditions afin de déterminer s'il faut inclure json2.js ou pas. Regardez le code source:

var JSON;
if (!JSON) {
    JSON = {};
}

if (typeof JSON.stringify !== 'function') {
    JSON.stringify = function (value, replacer, space) {
        // Code
    }
}

if (typeof JSON.parse !== 'function') {
    JSON.parse = function (text, reviver) {
        // Code
    }
}

Ce que cela fait, c'est tout d'abord vérifier si JSON existe déjà comme un objet. Si non, alors il crée un nouvel objet à la maison du JSON fonctions. Ensuite, il vérifie un natif de la mise en œuvre de l' .stringify() ou .parse() existent. Si non, alors il crée ces fonctions.

Bottom line: si une implémentation native existe, y compris json2.js n'écrase pas le natif de mise en œuvre. Sinon, il va ajouter cette fonctionnalité, donc il n'y a pas de raison, vous avez besoin d'utiliser le conditionnel, sauf si vous êtes en essayant de minimiser les demandes.

(Il peut également être noté que IE10 ne prend pas en charge les instructions conditionnelles, je vous le recommande contre en s'appuyant sur eux, sauf si il n'y a pas d'autre alternative.)

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