Объект JSON undefined в Internet Explorer 8

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

var res = "JSON=" + JSON.stringify(result);
Результат

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

Ответ 1

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

<!DOCTYPE html>

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

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

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

Ответ 2

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

Ответ 3

Другие вещи, которые отсутствие doctype или неправильного doctype или некоторая ошибка с синтаксисом html, заставят IE использовать режимы документа, отличные от того, что вы ожидаете.

Я использовал простой "" в тестовом документе и отсутствие тега TITLE в качестве дочернего элемента HEAD-тега, сделанного window.JSON стал undefined.

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

Ответ 4

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

Ответ 5

function parseJson(jsonString) {
    if ($.browser.msie && $.browser.version < 8) {
        return eval('(' + jsonString + ')');
    }
    else {
        return JSON.parse(jsonString);
    }
}

Ответ 6

поместите следующий код в свой файл 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;
 };

Ответ 7

Проверьте версию 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.

если не работает проверка эта статья.

Ответ 8

В моем случае ошибка undefined заключалась в том, что я отсутствовал в библиотеке 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));