在Internet Explorer中,JavaScript出现'JSON'未定义错误

51
我们在应用程序中使用jQuery。我们使用了一个jQuery插件来实现JavaScript会话。
在Firefox和大多数Internet Explorer 8浏览器中,它可以正常工作。
但在一些Internet Explorer 8浏览器中,它无法工作。它会出现以下错误。
Message: 'JSON' is undefined
Line: 6
Char: 3
Code: 0


Message: '$.namesession' is null or not an object
Line: 53
Char: 2
Code: 0

在这两种情况下,Internet Explorer的版本是相同的。

但是,在Internet选项的“高级”选项卡中,“使用SSL3.0”和“启用智能屏幕筛选器”复选框等设置存在差异。

当我们勾选它时,它开始工作。 当我们取消勾选时,它仍然可以工作。

IE8的实际问题是什么?


8
你检查过他们是否在IE7兼容模式下运行IE8吗?(打开开发工具[F12],然后检查工具栏以查看浏览器模式) - Spudley
我们更改的设置在IE中,转到“工具”->“Internet选项”->“高级”->启用智能屏幕过滤器,使用SSL 3.0和使用TLS 1.0。 - ajm
@Spudley 在某些情况下很难判断它是否有效,而在极少数情况下它无法正常工作。我们也无法经常复制这个问题,因此实际原因对我们来说仍然是未知的。抱歉,我知道这些信息并没有帮助到您。 - ajm
禁用 DivX 插件,看看是否有帮助。 - user667671
1
你检查过他们是否在IE7兼容模式下运行IE8吗?(打开Dev工具[F12],然后检查工具栏以查看浏览器模式)- Spudley Mar 17 '11 at 12:55 Spudley - 这对我有用。非常感谢。 - user1248603
这是一个关于编程的问题,有人遇到了“JSON未定义”的错误,在互联网上找到了相关的问题并得到了帮助。 - gis_wild
7个回答

67

@Dalen我们并没有特别使用JSON。它是由我们正在使用的Jquery插件使用的。 - ajm
1
无论何时使用JSON.stringify之类的内容,您仍需要包含json2.js。如果不是包含json2的问题,请在此处提交您的文件:http://closure-compiler.appspot.com/home,Google闭包编译器将告诉您代码中是否存在任何错误或警告。 - Dalen
@Dalen 我检查了网址http://closure-compiler.appspot.com/home,并将我的代码提交给它,但无论是在IE还是Firefox中,它都没有显示任何错误或警告。我在我的应用程序中包含jason2.js没有问题,但是我不知道如何检查它是否正常工作,因为我自己无法复制这个问题?:( - ajm
3
如果你遇到了和我一样的问题,你会发现他在IE7或IE8兼容模式下。 - Dalen

21
<!DOCTYPE html>
否则IE8将无法正常工作。另外你应该使用:

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

1
无论是 JSON 还是兼容模式,也不能在 IE 中使用 jQuery 2.0 及以上版本。 - D-Mac
2
@D-Mac 你的意思是IE < 9。jQuery并没有完全放弃对IE的支持。 - ZenMaster
1
第二个代码片段(X-UA-Compatible)用于明确禁用IE的兼容性视图,即使将站点添加到兼容性视图列表中也是如此。请参见http://msdn.microsoft.com/en-us/library/jj676915%28v=vs.85%29.aspx - David

7
请在您的项目中添加json2.js文件。我面临了同样的问题,但已经解决了。
请使用以下链接:https://raw.github.com/douglascrockford/JSON-js/master/json2.js,并创建新文件json.js,将网页内容复制并粘贴到新创建的文件中,然后将该文件移动到您的网络应用程序中。
希望这样可以解决问题。

6

在您的JSON响应中,检查是否存在额外的逗号。如果数组的最后一个元素有逗号,则在IE中会出现错误。


3
将内容类型更改为“application/x-www-form-urlencoded”。

这将导致umlauts(特殊字符)传输时出现错误,至少对我来说是这样。 - SamiSalami

0
我最近也遇到了同样的问题。在我的情况下,在一个php脚本的顶部,我有一些代码生成显然会向浏览器输出一些额外的内容。删除空行(在?>和html标记之间)和简单的清理帮助了我:
<?php 
include('../config.php');

//

ob_clean();
?>
<!DOCTYPE html>

-1

我遇到了这个错误2次。每一次都通过改变ajax类型来解决。要么是从GET改为POST,要么是从POST改为GET。

$.ajax({
        type:'GET', // or 'POST'
        url: "file.cfm?action=get_table&varb=" + varb
    });

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