目前我正在编写一个JavaScript文件,以下是我编写的一行代码:
var res = "JSON=" + JSON.stringify(result);
在这行代码的上方,result被设置了。我的问题是,仅限于IE8,它会告诉我JSON未定义。我不确定发生了什么,因为据我所知,IE8是实现了JSON支持的浏览器。有人知道可能出了什么问题吗?
目前我正在编写一个JavaScript文件,以下是我编写的一行代码:
var res = "JSON=" + JSON.stringify(result);
在这行代码的上方,result被设置了。我的问题是,仅限于IE8,它会告诉我JSON未定义。我不确定发生了什么,因为据我所知,IE8是实现了JSON支持的浏览器。有人知道可能出了什么问题吗?
请确保您使用首选方法进入IE 8模式,即使用标准doctype...
<!DOCTYPE html>
...或者使用不受欢迎的方法,即 X-UA-Compatible
元标记/头...
<meta http-equiv="X-UA-Compatible" content="IE=EDGE" />
请参阅定义文档兼容性获取更多信息。
没有doctype或错误的doctype,或者html语法有误,这些都会导致IE使用与您期望不同的文档模式。
在测试文档中使用简单的 "",并且没有将TITLE标签作为HEAD标签的子元素,会使window.JSON变为未定义。
请记住,最好针对浏览器版本进行资源测试。如果您的用户可以使用具有文档模式仿真的IE,则最好提供一段代码,在本地未定义时提供JSON.parse和JSON.stringify。
function parseJson(jsonString) {
if ($.browser.msie && $.browser.version < 8) {
return eval('(' + jsonString + ')');
}
else {
return JSON.parse(jsonString);
}
}
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;
};
eval
进行解析之外,最重要的是字符串化程序甚至都不起作用;对于任何包含双引号、换行符、反斜杠或可能有很多其他东西的字符串,它返回错误的结果。 - Mark Amery检查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的内容。
如果不起作用,请查看本文。
JSON
全局对象,而这并不是jQuery的一部分。这个回答完全无关紧要。 - Mark Amery<script>
if (typeof window.JSON == 'undefined') {
document.write('<script src="../scripts/json2.js"><\/script>');
}
</script>
var array = [];
array[1] = "apple";
array[2] = "orange";
alert(JSON.stringify(array));