$ .getJSON在IE9及以下版本中将undefined返回到成功回调

Hen*_*son 5 javascript ajax jquery json

我们遇到了一个奇怪的问题,$ .getJSON调用似乎只影响旧版本的IE.代码如下:

var success = function (response) {
     // do stuff
}

$.getJSON(url, success);
Run Code Online (Sandbox Code Playgroud)

在Chrome,Firefox,IE10下,这段代码工作得很好 - getJSON点击URL(有效,不是跨域),返回200 OK并返回数据,然后按照您的预期传递给成功函数.

但是在IE9及更低版本下,将调用成功回调,但未定义传递的响应参数.通过在IE开发工具中捕获网络流量,我可以看到呼叫到达URL,返回200 OK并在响应正文中返回有效的JSON.那么,当它遇到成功回调时,为什么会出现这种情况?

我尝试使用$ .ajax调用而不是使用适当的参数,我看到了相同的行为.代码如下:

$.ajax({
    dataType: "json",
    url: url,
    success: success
};
Run Code Online (Sandbox Code Playgroud)

我们正在使用jQuery 1.7.2(我们在页面上获得的一个库在较新版本的jQuery下被破坏,因此是旧版本).

编辑:刚尝试更新页面使用jQuery 1.10.1,并没有解决问题.

编辑2:我已经确认返回的JSON数据是通过jsonlint.com有效的,所以这也不是问题.

Hen*_*son 1

事实证明这不是 jQuery 问题 - 它与服务器返回的内容类型标头有关。无论出于何种原因(仍然不清楚到底是什么改变导致了问题),服务器返回的媒体类型(尽管是普通的旧应用程序/json)在旧版本的 IE 下没有被 jQuery 正确解释。我对服务器端代码进行了更改,以返回供应商特定的 JSON 内容类型,代码现在可以再次运行。

编辑:我发现服务器端的更改之一是我们用于服务请求的Nancy框架从版本 0.17 升级到版本 0.20。我猜这可能以某种微妙的方式影响了标题,尽管我仍然没有确切地追踪到如何影响。