Объект JSON не определен в Internet Explorer 8
В настоящее время я пишу файл JavaScript и имею следующую строку:
var res = "JSON=" + JSON.stringify(result);
результат устанавливается чуть выше этой строки. Проблема, с которой я сталкиваюсь, заключается в том, что IE8 (то есть только IE8) сообщает мне, что JSON каким-то образом не определен. Я не уверен, что делать с этим, так как, как я понял, IE8-это браузер, который реализовал поддержку JSON. Кто-нибудь знает, что может произойти?
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));