我正在尝试以可比模式加载 IE8 的 JavaScript 中的 JSON 功能。
我是 advised 使用 douglascrockford/JSON-js 在过时的浏览器中加载 JSON。
这就是我所做的。我在资源文件夹中添加了一个新文件,并将其命名为 json2.js
然后从 JSON-js 项目中复制了 json2.js
文件内容并将其粘贴到我的 json2.js
文件并将文件 resources/json2.js
包含到我的应用程序中。
现在,我尝试使用 JSON.stringify
将对象转换为 json 字符串,这给了我以下错误
但是当我在兼容模式下在 IE8 中使用 JSON.stringify(records)
时,出现此错误
Line: 314
Char: 21
Error: Invalid procedure call or argument
Code: 0
这是我所做的
HTML 标记
<div id="d">Click Here</div>
<div id="s"></div>
Javascript代码
var records = {};
$(function(e){
records['123'] = {};
records['456'] = {};
records['123']['rec_id'] = 4456;
records['123']['created_at'] = '';
records['123']['assigned_at'] = '';
records['123']['sys_id'] = 1745;
records['456']['rec_id'] = 4456;
records['456']['created_at'] = '';
records['456']['assigned_at'] = '';
records['456']['sys_id'] = 1745;
$.each(records, function(callID, record){
record['campaign_id'] = '1';
record['offset'] = 123;
record['attempt'] = '7';
record['phone'] = '800-123-4567';
record['identity'] = 123;
record['code'] = 'Some Code';
record['notes'] = 'Some notes';
record['completed_by'] = 'Mike A';
record['name'] = null;
record['completed_at'] = "";
});
$('#d').click(function(e){
$('#s').text( JSON.stringify(records) );
});
});
上面的代码可以在下面的jFiddle https://jsfiddle.net/4632wf5n/中找到
如何在 IE8 中使用比较模式将对象转换为 json 字符串?
最佳答案
虽然根据Mozilla Developer Network (MDN) , IE8 支持 JSON.stringify
,如果不支持,则可以使用 polyfill (即,如果浏览器不支持,然后使用自定义实现)。如果 Douglas JSON.js 不起作用,MDN还提供了 polyfill 的代码,我已将其复制到此处。只需将其插入到任何其他脚本之前,JSON.stringify 就可以在不支持的 IE6+ 浏览器中运行。
if (!window.JSON) {
window.JSON = {
parse: function(sJSON) { return eval('(' + sJSON + ')'); },
stringify: (function () {
var toString = Object.prototype.toString;
var isArray = Array.isArray || function (a) { return toString.call(a) === '[object Array]'; };
var escMap = {'"': '\\"', '\\': '\\\\', '\b': '\\b', '\f': '\\f', '\n': '\\n', '\r': '\\r', '\t': '\\t'};
var escFunc = function (m) { return escMap[m] || '\\u' + (m.charCodeAt(0) + 0x10000).toString(16).substr(1); };
var escRE = /[\\"\u0000-\u001F\u2028\u2029]/g;
return function stringify(value) {
if (value == null) {
return 'null';
} else if (typeof value === 'number') {
return isFinite(value) ? value.toString() : 'null';
} else if (typeof value === 'boolean') {
return value.toString();
} else if (typeof value === 'object') {
if (typeof value.toJSON === 'function') {
return stringify(value.toJSON());
} else if (isArray(value)) {
var res = '[';
for (var i = 0; i < value.length; i++)
res += (i ? ', ' : '') + stringify(value[i]);
return res + ']';
} else if (toString.call(value) === '[object Object]') {
var tmp = [];
for (var k in value) {
if (value.hasOwnProperty(k))
tmp.push(stringify(k) + ': ' + stringify(value[k]));
}
return '{' + tmp.join(', ') + '}';
}
}
return '"' + value.toString().replace(escRE, escFunc) + '"';
};
})()
};
}
关于javascript - 如何在 IE8 的 Javascript 中加载 JSON 功能?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35881315/