目前,我正在编写一个JavaScript文件,并包含以下行:
var res = "JSON=" + JSON.stringify(result);
结果被设置在这条线的正上方。我遇到的问题是IE8(仅限IE8)向我报告了JSON未定义。我不确定该怎么做,因为据我了解,IE8是实现了JSON支持的浏览器。有谁知道会发生什么?
Answers:
通过使用首选方法(标准doctype),确保您实际上处于IE 8模式下。
<!DOCTYPE html>
或不需要的方法,X-UA-Compatible
元标记/标题
<meta http-equiv="X-UA-Compatible" content="IE=EDGE" />
有关更多信息,请参见定义文档兼容性。
JSON =
(您在问题中编写的示例代码是一个好的开始-您是否在使用eval
?)。
如果您已经在使用JQuery,则使用jQuery.parseJSON为我解决了此问题。
缺少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);
}
}
将以下代码放入您的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;
};
eval
进行解析之外,最重要的是字符串化器甚至无法工作。对于任何包含双引号,换行符,反斜杠或可能包含许多其他内容的字符串,它将返回错误的结果。
检查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 migration的信息。
如果不起作用,请查阅本文。
JSON
不属于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));