javascript - 如何在 IE8 的 Javascript 中加载 JSON 功能?

标签 javascript jquery json internet-explorer-8

我正在尝试以可比模式加载 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/

相关文章:

javascript - 在 Cytoscape JS 中撤消删除节点操作

jquery - Bootstrap 崩溃数据目标选择器失败

java - 将字符串从 Web 服务转换为 JSON 数组

javascript - 当调用对象已获取 "this"时,如何从静态方法中引用包含类?

javascript - 将数组绑定(bind)到 AngularJS 中的指令变量

javascript - Jquery 选择器找出非空输入的计数

java - 使用 Java 从 MongoDB 返回多个文档

c# - 如何在单元测试中验证序列化的 JSON 在 Python/C# 中是否正确?

javascript - 在 windbg 断点命令中调用 javascript 函数

jquery - 结合使用 jQuery 和 AngularJS?