【发布时间】:2013-10-23 12:47:44
【问题描述】:
我们遇到了一个关于 $.getJSON 调用的奇怪问题,它似乎只影响旧版本的 IE。代码如下:
var success = function (response) {
// do stuff
}
$.getJSON(url, success);
在 Chrome、Firefox、IE10 下,这段代码运行良好——getJSON 命中 URL(有效,不是跨域),返回 200 OK 并返回数据,通过正如您所期望的那样通过成功函数。
但是在IE9及以下,调用成功回调但传递的响应参数未定义。通过在 IE Dev Tools 中捕获网络流量,我可以看到调用到达 URL,返回 200 OK 并在响应正文中返回有效的 JSON。那么为什么在成功回调时会出现未定义的情况呢?
我尝试使用 $.ajax 调用来代替适当的参数,但我看到了相同的行为。代码如下:
$.ajax({
dataType: "json",
url: url,
success: success
};
我们使用的是 jQuery 1.7.2(我们在页面上获得的库之一在 jQuery 的较新版本下已损坏,因此是旧版本)。
编辑:刚刚尝试更新页面以使用 jQuery 1.10.1,并没有解决问题。
编辑 2:我已经确认通过 jsonlint.com 返回的 JSON 数据是有效的,所以这也不是问题。
【问题讨论】:
-
如果你使用普通的
XMLHttpRequest会出现同样的问题吗? -
@Qantas94Heavy 就像调用 $.ajax 一样?我刚刚编辑了问题以包含它 - 是的,我尝试过使用 $.ajax,同样的行为
-
返回的数据是什么?
-
你的 json 绝对有效吗? IE 对额外的逗号等不那么宽容。通过在 jsonlint.com 之类的内容中检查语法来仔细检查您的语法。
-
@HenryWilson 您使用的是 IE 浏览器工具还是实际的 IE9?使用浏览器工具时存在一些已知问题(您可以在其中选择所需 IE 版本的小下拉菜单),因为 IE 提供的各种模式从未真正完全代表旧版本。如果可以的话,启动一个虚拟机或其他东西,然后从那里尝试。
标签: javascript jquery ajax json