JSON.stringify和JSON.parse在IE9中无法工作?

19

我在很多地方使用 JSON.StringifyJSON.parse,在Firefox中可以很好地工作。但在IE9中无法正常工作,甚至在IE8中也不能工作。我该怎么办?


3
你能复制粘贴一些代码吗? - yoda
在这里查看如何在IE 8中实现:https://dev59.com/AnA75IYBdhLWcg3wYH_I#10940623 - ggc
请点击此处查看更多内容:https://dev59.com/AnA75IYBdhLWcg3wYH_I#10940623 - ggc
4个回答

35

JSON.stringify 以小写字母 s 开头。在IE8+中都可用, 但只有在 标准模式 下才可使用 stringifyparse 方法。

如果您当前使用的是怪异模式,请在文档前添加 <!DOCTYPE html>。同时,注意调用 JavaScript 方法时的大写和小写 - 所有内置方法都以小写字符开头。


6
此外,如果你正在本地开发并使用localhost地址,请注意。几周前的一次IE9的Windows更新导致它自动对某些localhost地址使用兼容模式,这可能会导致JSON.parse/stringify突然不可用,即使你的标记应该没有触发怪癖模式。 - Dave Ward
我已经有类似于<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">的东西了。 - saurabh ranu

11
为什么要依赖浏览器有对象,而不是直接包含由Douglas Crockford编写的脚本文件?您可以在此处找到缩小版文件:http://www.json.org/js.html。导入后,您就不必担心浏览器中存在的方法。

在我看来这是一个更好的想法,但是我应该添加哪个文件?有很多文件https://github.com/douglascrockford/JSON-js - saurabh ranu
使用json2.js。那是最新的版本。如果可以,请获取压缩后的1。 - Baz1nga
没有特别的内容,只是一个没有空格、返回和缩小变量名称等的文件,以减少文件大小。谷歌一下“bat us minification”就可以了解它是什么。如果没有被缩小的文件,请选择 json2.js,并在需要时进行缩小。 - Baz1nga
当我开始使用 JSON.stringify 时,我很惊讶它被内置到浏览器(Firefox)中,尽管我确定它在IE8中不起作用。我忘记在IE8中进行测试,果然一旦我在那里尝试,我的应用程序就无法正常工作了。感谢提供的有帮助的解决方案! - blong
4
建议仅在浏览器不原生支持 JSON 对象时,通过检查 window.JSON 是否已定义来有条件地加载 json.org。否则会增加下载的 JS 文件数。 - Maksym Kozlenko
json2.js 是否比 IE10 原生支持的运行速度慢?(这是有条件地加载它而不是总是加载它的另一个原因吗?) - ClearCloud8

0

如果有其他需要 (比如我在另一个库中使用了"use strict"),你可以考虑一种替代方案,在某些情况下可能需要以严格模式运行。具体信息请参考这里:https://github.com/douglascrockford/JSON-js。我对此进行了修改,首先检查 JSON 是否未定义,只有在它未定义的情况下才生成函数 JSON.parse:

if (typeof JSON === "undefined") {
    var JSON = {
        parse: <insert value of json_parse from library here>
    };
}

我的问题是应用程序代码在IE9中无法工作(我认为是由参与库使用的严格模式引起的)。这对我解决了问题。


0
问题是,发送UTF-8头部将使JSON无效(IE不喜欢那样做)。正如问题所描述的那样,这可能仍然适用于IE9...几年前曾经写过一个如何。为能够解析本地JSON的浏览器添加JSON支持可能不是最佳解决方案,因为它会产生无用的开销——仅仅是因为未能以预期格式传递JSON。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接