使用jQuery的Ajax GET请求仅在Safari中返回null

时间:2014-11-13 20:24:02

标签: javascript jquery ajax json safari

我试图调试我只在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类型也没有任何区别。

帮助,我把头发拉出来!

1 个答案:

答案 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并发送。