Неопределенный объект JSON в Internet Explorer 8 - PullRequest
70 голосов
/ 17 января 2011

В настоящее время я пишу файл JavaScript, и у меня следующая строка:

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

Результат устанавливается чуть выше этой строки.У меня проблема в том, что IE8 (то есть только IE8) сообщает мне, что JSON как-то не определен.Я не уверен, что с этим делать, поскольку, как я понял, IE8 - это браузер, в котором реализована поддержка JSON.Кто-нибудь знает, что может происходить?

Ответы [ 8 ]

117 голосов
/ 17 января 2011

Убедитесь, что вы на самом деле находитесь в режиме IE 8, используя предпочтительный метод, стандартный тип документа ...

<!DOCTYPE html>

... или нежелательный метод, метатег / заголовок X-UA-Compatible meta...

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

Подробнее см. Определение совместимости документов .

9 голосов
/ 02 октября 2013

Использование jQuery.parseJSON решило эту проблему для меня, если вы уже используете JQuery.

6 голосов
/ 04 сентября 2011

Другие причины, по которым отсутствие типа документа или неправильного типа документа или какая-либо ошибка с синтаксисом html, заставят IE использовать режимы документа, отличные от ожидаемых.отсутствие тега TITLE как дочернего элемента тега HEAD сделало window.JSON неопределенным.

Всегда помните, что лучше проверять ресурс на соответствие версии браузера.И, если ваши пользователи могут использовать IE с эмуляцией режимов документов, лучше иметь фрагмент кода для предоставления JSON.parse и JSON.stringify, когда нативные не определены.

3 голосов
/ 21 ноября 2013
function parseJson(jsonString) {
    if ($.browser.msie && $.browser.version < 8) {
        return eval('(' + jsonString + ')');
    }
    else {
        return JSON.parse(jsonString);
    }
}
2 голосов
/ 01 февраля 2013

Может произойти, несмотря на <!DOCTYPE html>, если кодировка страницы UTF-8 с BOM (метка порядка байтов). Попробуйте сохранить файл как UTF-8 без BOM, используя подходящий текстовый редактор.

1 голос
/ 13 марта 2014

вставьте следующий код в ваш файл 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 голосов
/ 30 июля 2014

В моем случае неопределенная ошибка была из-за того, что мне не хватало библиотеки JSON.

Вы можете добавить объект JSON следующим образом (замените относительный путь своим собственным путем):

<script>
        if (typeof window.JSON == 'undefined') {
          document.write('<script src="../scripts/json2.js"><\/script>'); 
        }
</script>

Для библиотеки json2: http://cdnjs.com/libraries/json2/

Существует также библиотека json3: http://cdnjs.com/libraries/json3/

Затем вы можете обратиться к ней в своем коде:

var array = [];
array[1] = "apple";
array[2] = "orange";
alert(JSON.stringify(array));
0 голосов
/ 15 декабря 2013

Проверьте версию jQuery. jQuery 2.0 отбрасывает поддержку IE 6, 7 и 8 . Вместо этого используйте jQuery 1.x, который все еще официально поддерживается. Вы можете использовать этот код.

<script src="http://code.jquery.com/jquery-1.9.0.js"></script>
<script src="http://code.jquery.com/jquery-migrate-1.2.1.js"></script>

подробнее о jquery migrate .

если не работает, проверьте эту статью .

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