«JSON» - неопределенная ошибка только в IE - PullRequest
39 голосов
/ 23 февраля 2011

Я делаю AJAX-вызов службе WCF, и когда я передаю свои данные, я использую JSON.stringify ()

Вызов возвращается и отлично работает в FF и Chrome, но не в IE8. Я получаю сообщение об ошибке: «JSON» не определено

предложения?

p.s. Я также хочу, чтобы это работало в IE7

Ответы [ 6 ]

54 голосов
/ 23 февраля 2011

Используйте json2 для последовательной кросс-браузерной реализации.

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

27 голосов
/ 11 января 2012

У меня была проблема с IE9.IE9 рендерил мою страницу в режиме «причуд», решение было просто добавить <!DOCTYPE html>.Это вывело меня из режима «причуд», который, я уверен, исправил не только эту проблему!

19 голосов
/ 24 февраля 2011

Обновление

Проверьте библиотеку JSON3 . Это работает как шарм.

Отличия от JSON2

Надеюсь, это поможет.


Надеюсь, это поможет. Я получил это из нескольких онлайн-источников давно. У меня нет ссылок.
Извините, что я не могу цитировать ссылки.

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;
    };
}();
1 голос
/ 19 июля 2012

Чтобы ваша функция работала лучше в IE, импортируйте код анализатора JSON2 в ваш файл, так как IE по умолчанию не поддерживает JSON.Stringify().

Его можно найти здесь

0 голосов
/ 18 ноября 2014

JQuery 2.x больше не совместим с IE 6-8. JQuery 2.0 beta 2, примечания к выпуску

Я знаю, что главный вопрос касается старых версий JQuery, но это вызывало у меня ошибку.Я установил JQuery 1.x, API-совместимый с JQuery 2.x, и добавил следующий код обнаружения:

<!--[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 голосов
/ 17 июля 2012

В IE откройте настройки представления совместимости и удалите localhost из списка для «Веб-сайты, которые вы добавили в представление совместимости».У меня это сработало.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...