Объект 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));