Объект JSON не определен в Internet Explorer 8


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

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

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

8 70

8 ответов:

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

<!DOCTYPE html>

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

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

посмотреть Определение Совместимости Документов для получения дополнительной информации.

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

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

Я использовал простой "" в тестовом документе и отсутствие тега заголовка в качестве дочернего тега HEAD сделало окно.JSON становится неопределенным.

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

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

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

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

проверьте версию 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 и мигрировать.

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

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