【问题标题】:Ajax GET request using jQuery returning null in Safari only仅在 Safari 中使用 jQuery 的 Ajax GET 请求返回 null
【发布时间】: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


【解决方案1】:

可能站点以http://domain.com 运行(没有www)并且ajax 调用以http://www.domain.com 运行。并且 Safari 将其假定为跨域请求...尝试确认该版本。作为一种解决方案,可以强制 www 例如使用 .htaccess ...

【讨论】:

    【解决方案2】:

    我今天在 Safari 13.1 中遇到了这个确切的问题。 JSON 正从 /php/chat.php 正确返回,直接加载时效果很好。但是当被 Ajax 加载时,它会抛出“发生意外错误”。如上所述,探索 JSON 解析发现了“JSON:意外 EOF”——我不得不得出结论,Safari 正在丢弃内容。

    我发现的第一个解决方案是将/php/chat.php 重命名为/php/chat/index.php,然后使用/php/chat/ 通过Ajax 加载它。

    我第二天回来尝试加载 /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和发送。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-03-31
      • 1970-01-01
      • 2013-01-21
      • 2018-05-11
      • 2016-11-08
      • 2022-09-30
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多