我试图调试我只在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:意外的EOF"。
很明显,使用Safari调试器逐步执行jQuery代码,Safari正在完全丢弃返回的JSON数据 - 它正在尝试解析空字符串,从而引发错误。
我们已经看到 HTTP 请求与消息监控软件来回传递,并且看到CGI正在正确地创建消息并正确地将其发送到Safari。它的Safari正在丢弃JSON数据。
我在这里看到其他问题,由于他们的身份验证堆栈问题,在Safari中讨论空响应,但是如上所示在头部添加no-cache规则没有区别;更改为POST类型也没有任何区别。
帮助,我把头发拉出来!
答案 0 :(得分:0)
我今天在Safari 13.1中遇到了这个确切的问题。已从/php/chat.php
中正确返回JSON,当直接加载时可以正常工作。但是当由Ajax加载时,它引发了“发生意外错误”。如上所述,探索JSON解析时发现了“ JSON:意外的EOF”-我被迫得出结论,即Safari欺骗了内容。
我发现的第一个解决方案是将/php/chat.php
重命名为/php/chat/index.php
,然后由Ajax使用/php/chat/
加载它。
第二天我回来尝试加载/php/chat
,/php/chat/
和/php/chat/index.php
-并且所有这三个都起作用。这让我感到困惑,因为我一直在建立.php
扩展名正在触发错误的理论。
因此,我发现的第二个解决方案是将/php/chat.php
重命名为其他任何名称。 /php/cht.php
和/php/chatt.php
以及/php/chat-dev.php
和/php/chat-status.php
一样有效-考虑到该文件名特定于Safari的错误,我探索了Nginx Web服务器的配置看看我能不能碰运气找到针对chat.php
的指令。
在浏览PHP时,逐步记录表明没有服务器错误,并且正确生成了JSON并发送。