JSON 对象在 Internet Explorer 8 中未定义

IT技术 javascript html json internet-explorer-8
2021-02-07 16:30:42

目前我正在编写一个 JavaScript 文件并有以下几行:

var res = "JSON=" + JSON.stringify(result);

结果被设置在这条线的正上方。我遇到的问题是 IE8(仅限 IE8)向我报告 JSON 以某种方式未定义。我不知道该怎么做,因为据我所知,IE8 是一个实现了 JSON 支持的浏览器。有谁知道会发生什么?

6个回答

通过使用首选方法,即标准文档类型,确保您实际上处于 IE 8 模式...

<!DOCTYPE html>

...或不需要的方法,X-UA-Compatible元标记/标题...

<meta http-equiv="X-UA-Compatible" content="IE=EDGE" />

有关更多信息,请参阅定义文档兼容性

@keybored:那么必须覆盖 JSON 全局对象。检查您的代码JSON =(您在问题中编写的示例代码是一个好的开始 - 您是否在使用eval?)。
2021-03-15 16:30:42
我没有看到类似的东西,但我想知道一些事情,上面的调用是在 iframe 中进行的。我需要打电话给父母才能真正获得 JSON 吗?
2021-03-21 16:30:42
绝对值得检查一下,因为兼容模式可能会在您没有意识到的情况下被触发 - 打开开发人员工具 (F12) 并在工具栏中查看浏览器模式。
2021-04-03 16:30:42
我放下了这条线并检查了开发工具。绝对在 IE8 标准模式下运行。
2021-04-07 16:30:42
最终我确实解决了这个问题。原来不是这个,而是 IE7 兼容性将成为我接下来要做的事情之一,毫无疑问,你已经为我节省了时间。谢谢!
2021-04-07 16:30:42

使用jQuery.parseJSON为我解决了这个问题,以防您已经在使用 JQuery。

其他缺少 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);
    }
}
这甚至没有试图回答这个问题。
2021-04-13 16:30:42

尽管<!DOCTYPE html>页面编码UTF-8带有BOM(字节顺序标记),但仍可能发生尝试使用合适的文本编辑器将文件另存为UTF-8without BOM