0x800a1391 - JavaScript 运行时错误: 在IE 10中,'JSON'未定义。

9

我正在Windows 8上使用IE 10兼容性模式,并在Debug模式(VS 2012)下运行WebApp时遇到以下错误: 0x800a1391 - JavaScript运行时错误:'JSON'未定义。 以下是代码:

var data = JSON.stringify(GetUserDetails());

function GetUserDetails() {
    var userData = {};
    userData.userName = $('#txtUserName').val();
    userData.password = $('#txtPassword').val();
    return userData;
}

同时,奇怪的事实是相同的代码在IIS 8中运行良好,但在IE 10浏览器中运行有问题。有任何建议吗?


这不是你问题的答案,但我想补充一下,当你处理IE浏览器时,不应该依赖于将对象转换为JSON或JSON转换为对象。我建议使用一些其他小型JS库来执行此类功能,例如json2.js - ebram khalil
2
我在我的标记中有<!DOCTYPE html>标签,但直到我在IE 10工具菜单中取消选择兼容性视图,我才继续收到错误。 - MDA
是的,我相信这是预期的行为,因为根据答案,JSON只能在标准模式下工作。 - Rameez Ahmed Sayad
4个回答

8

IE8及以上版本只有标准模式下才具有JSON对象。因此,您需要确保文档具有文档类型声明。


1
谢谢,这看起来就是答案了...当我检查IE 10时,它有它,而IE 10兼容性没有它。IE 10有像<!-- DOCTYPE html -->这样的东西,而IE 10兼容性则有<!DOCTYPE html PUBLIC "">...不确定为什么被注释掉了... - Rameez Ahmed Sayad
@RameezAhmedSayad:IE10肯定有JSON。同样,它只在标准模式下可用。 - T.J. Crowder

3
我发现对我来说,是IE 10兼容性的内部网设置引发了我的内部网站的异常:

“在兼容性视图中显示内部网站”

要更改此标志,或仅仅禁用它,在IE 10中显示“命令栏”,然后选择“工具”>“兼容性视图设置”,取消选中底部第二个选项即可。问题立即得到解决。

enter image description here


DOCTYPE实际上是相同的,你可以说两者都是隐式的。 - Rameez Ahmed Sayad

1

您需要包含json2.js

请查看json2 inclusion以获取更多详细信息。有些情况下,我们必须处理客户使用IE7标准的情况。因此,我们的代码也必须考虑到这些情况。我们的零售网站被数百个使用IE7标准的客户访问。包括json2可以解决这个问题。


0
我在运行Windows 8和IE 10时,尝试使用Visual Studio 2010开发Web服务器运行ASP .NET应用程序时,遇到了相同的“JavaScript运行时错误...JSON未定义”问题。当我打开浏览器,点击“Alt”显示菜单,然后点击“工具”->“兼容性视图设置”,取消选中“在兼容性视图中显示所有网站”时,就不再出现错误了。

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