如果从localhost失败,则IE JSON解析可以正常工作

时间:2011-07-29 03:24:41

标签: json internet-explorer

我正在尝试跟踪我在IE中解析一些由AJAX请求返回的JSON时遇到的javascript异常。通常我会在我的代码中的某个地方假设JSON格式错误,但在这种情况下,JSON在Chrome,FireFox& IE但仅在IE的情况下,如果URL是localhost。如果我将URL更改为my-laptop,它指向完全相同的位置,则JSON无法在IE中解析,但在Chrome和FireFox中仍然可以。

JSON非常简单。下面的行来自VS.Net的调试器,因此两端的双引号是装饰性的:

data = "{ "ID" : 15, "Name" : "Hobart" } "

JSON正在解析:

data = JSON.parse(data);

我已经检查了我能想到的一切,看看来自localhost和my-laptop的响应之间的响应是否有所不同,但是无法发现任何内容。为什么IE会在服务器主机名更改时决定不解析JSON?

更新:如果我在打开IE兼容模式的情况下打开localhost版本,那么JSON配对alsi就会失败。关闭兼容模式,它可以工作。

3 个答案:

答案 0 :(得分:1)

Chin Boons的回答似乎不对。 JSON中的键需要引号,而Number类型的值没有引号。

当你处于兼容模式时,我认为JSON是未定义的。参见例如在这里:Browser-native JSON support (window.JSON)

在这种情况下,也许https://github.com/douglascrockford/JSON-js可能对您有帮助。

答案 1 :(得分:0)

您提供的JSON不是有效的JSON结构。每个元素都需要用封闭的" "包裹起来。

data = "{ "ID" : "15", "Name" : "Hobart" }"

注意15现在是“15”。

一些较弱的解析器和/或浏览器组合可能具有更好的容差,可以轻微偏离规范。

答案 2 :(得分:0)

问题的原因归结为IE的兼容模式。这个question中的评论让我打开了IE Developer Tools窗口,Web应用程序在IE7兼容模式下运行。我不知道它为什么这样做,兼容模式按钮没有显示在IE地址栏中。至少我知道现在的问题是什么,而且比调试大量的javascript更容易解决。