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

问题描述 投票:1回答:2

我很努力地尝试调试仅使用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的身份验证堆栈存在问题而导致的Safari空响应,但是如上所述,在标头中添加了无缓存规则并没有什么区别;更改为POST类型也没有区别。

[帮助,我正在拔头发!

javascript jquery ajax json safari
2个回答
0
投票

可能站点正在以http://domain.com运行(没有www),而ajax调用正在以http://www.domain.com运行。 Safari会将其视为跨域请求...尝试确认该版本。作为解决方案,可以使用例如。htaccess ...

强制www。

0
投票

我今天遇到了这个确切的问题。 JSON已从/php/chat.php中正确返回,当直接加载时可以正常工作。但是当由Ajax加载时,它抛出“发生意外错误”。如上所述,探索JSON解析发现了“ JSON:意外的EOF”-我被迫得出结论,Safari会欺骗内容。

尝试一下我唯一可以应用的解决方案是将/php/chat.php重命名为/php/chat/index.php,然后由Ajax使用/php/chat/加载它。

浏览PHP,逐步记录未显示任何服务器错误,并且正确生成了JSON和发送。

© www.soinside.com 2019 - 2024. All rights reserved.