【发布时间】:2015-01-11 02:53:51
【问题描述】:
我在尝试调试仅使用 Safari(运行 5.1)时遇到的问题时发疯了。
我正在使用 jQuery 做一个简单的 ajax GET 请求,如下所示:
$.ajax({
type: "GET",
url: "get_values.cgi",
data: {},
contentType: "application/json; charset=utf-8",
headers: { "cache-control": "no-cache","pragma":"no-cache" },
dataType: "JSON",
cache: false,
error: function (XMLHttpRequest, textStatus, errorThrown) {
alert("Fatal Error");
},
success: function (data) {
(do stuff here)
}
此调用在除 Safari 之外的所有浏览器中都能正常工作。 CGI 代码返回格式良好的 JSON 数据,并且所有其他浏览器都可以很好地解析它(已使用最新版本的 IE、Chrome 和 Firefox 进行了测试)。
Safari 抛出的错误来自 jQuery 代码 - 它是“JSON: Unexpected EOF”。
从使用 Safari 调试器单步执行 jQuery 代码可以清楚地看出,Safari 正在完全丢弃返回的 JSON 数据 - 它正在尝试解析空字符串并因此引发错误。
我们观察了消息监控软件来回发送的 HTTP 请求,并且看到 CGI 清楚地正确地创建了消息并将其正确地发送到 Safari。是 Safari 丢弃了 JSON 数据。
我在这里看到了其他关于 Safari 中的空响应的问题,因为它们的身份验证堆栈存在问题,但是如上所示将无缓存规则添加到标题中没有任何区别;更改为 POST 类型也没有任何区别。
救命,我要拔头发了!
【问题讨论】:
-
有没有机会分享 get_values.cgi 返回的 JSON?
-
看起来像这样:{"hide_all":"true"} --> 就是这样。
-
这可能只是一个复制粘贴错误,但我注意到您的代码缺少 AJAX 方法调用 $.ajax({ ... }); 的关闭//
-
不幸的是,是的,只是复制和粘贴错误 - 实际代码有分号。似乎对 GET 的响应中的某些内容被 Safari 丢弃了——但所有其他浏览器都很高兴。嘎。
-
我也遇到了同样的问题有没有人找到解决办法????
标签: javascript jquery ajax json safari