我需要用:
JSON.stringify()
Run Code Online (Sandbox Code Playgroud)
应该由Chrome,Safari和Firefox支持.我认为IE8也支持JSON对象.我认为IE7和6没有,所以我这样做:
<!--[if lt IE 8]>
<script src="http://www.json.org/json2.js"></script>
<![endif]-->
Run Code Online (Sandbox Code Playgroud)
所以,我认为这只会在IE6和7中导入外部JavaScript.我查看了托管脚本的URL,只有当IE版本小于9时才包含它们:
http://code.google.com/p/html5shiv/
<!--[if lt IE 9]>
<script src="http://www.json.org/json2.js"></script>
<![endif]-->
Run Code Online (Sandbox Code Playgroud)
所以我也应该为IE 8包含这个吗?
whi*_*and 66
要直接回答标题中的问题,是的IE8原生支持JSON.stringify().
IE8是第一个获得此支持的IE版本,开发团队在此详细解释了该功能:http: //blogs.msdn.com/b/ie/archive/2008/09/10/native-json -in-ie8.aspx
答案问题的第二部分,是的,您需要包含IE6/IE7的备用功能.像Modernizr这样的东西可以很容易地检查这个.
另请注意,如果用户处于IE8中的兼容性视图中,则JSON对象将不可用.
小智 31
如果您尝试JSON.stringify()使用IE 8,则需要确保它不能在兼容模式下工作.请参阅Internet Explorer 8中未定义的JSON对象
你需要添加
<meta http-equiv="X-UA-Compatible" content="IE=8" />
Run Code Online (Sandbox Code Playgroud)
到你的页面
Eva*_*ice 16
有一个更好的解决方案......
这不能直接回答您的问题,而是为您的问题提供完整的解决方案.
在jQuery的JSON库提供了一个使用本地JSON对象实现,如果它是可用的,并回落到它自己的JSON实现,如果它不是一个包装.这意味着它可以在任何浏览器中使用.
这是项目主页的用法示例:
var thing = {plugin: 'jquery-json', version: 2.3};
var encoded = $.toJSON( thing );
// '{"plugin":"jquery-json","version":2.3}'
var name = $.evalJSON( encoded ).plugin;
// "jquery-json"
var version = $.evalJSON(encoded).version;
// 2.3
Run Code Online (Sandbox Code Playgroud)
用法非常简单:toJSON将JS源字符串化; evalJSON将JSON字符串数据转换回JavaScript对象.
在你看源头时,实现起来非常简单,但效果非常好.我在一些项目中亲自使用过它.
如果它适用于每个浏览器,则无需进行浏览器检测.
ato*_*217 10
将以下代码放入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;
};
Run Code Online (Sandbox Code Playgroud)
您不需要使用条件来确定是否包含json2.js.看一下源代码:
var JSON;
if (!JSON) {
JSON = {};
}
if (typeof JSON.stringify !== 'function') {
JSON.stringify = function (value, replacer, space) {
// Code
}
}
if (typeof JSON.parse !== 'function') {
JSON.parse = function (text, reviver) {
// Code
}
}
Run Code Online (Sandbox Code Playgroud)
这样做首先检查是否JSON已作为对象存在.如果没有,那么它会创建一个新对象来容纳JSON函数.然后,它检查本机实现.stringify()或.parse()存在.如果没有,那么它会创建这些功能.
底线:如果存在本机实现,包括json2.js不会覆盖本机实现.否则,它将添加该功能,因此除非您尝试最小化请求,否则您没有理由需要使用条件.
(也可能会注意到IE10不支持条件语句,所以除非没有其他选择,否则我建议不要依赖它们.)
| 归档时间: |
|
| 查看次数: |
82498 次 |
| 最近记录: |