未能加载资源:Safari上的请求超时



我们的web应用程序已经在大多数浏览器上正常工作了一年多。最近,我们发现它在Safari上运行不太好。

许多操作最终都会出现以下错误:Failed to load resource: Request timed out。有趣的是,动作在那之后(大部分时间)实际上是正确执行的

在查看错误时,当出现ajax请求时,似乎会发生这种情况。

首先,我尝试通过以下操作更改ajax超时设置:

 $.ajax({
      "type"      : methode,
      "dataType"  : "json",
      "url"       : url,
      "async"     : async,
      "data"      : donneesEnvoyees,
      "timeout"   : 60000
 })

这并没有改变任何事情,错误实际上在大约10秒后出现,这比定义的超时时间还短。

在互联网上读了一点之后,我看到了一些关于不指定缓存的答案,这样safari就不会将post参数保存在缓存中。我不能说我完全理解这一点,但我仍然尝试了以下方式:

$.ajax({
     "type"      : methode,
     "headers"   : { "cache-control": "no-cache" }, <-- added this line
     "dataType"  : "json",
     "url"       : url,
     "async"     : async,
     "data"      : donneesEnvoyees,
     "timeout"   : 60000
 })

正如你所猜测的,我仍然会犯同样的错误。

你知道发生了什么吗?为什么这个错误只发生在Safari上,而不发生在其他浏览器上?如何修复?

在ajax设置上设置async: true。它将使浏览器保持连接,并在收到回复后立即关闭。

我遇到了同样的问题。通过将CORS标头和响应状态代码添加为200修复

 res.header('Access-Control-Allow-Origin', '*');
 res.status(200);

如何&为什么

在通过阅读jQuery的源代码深入研究错误后,我意识到真正的问题是jQuery+Safari中的XMLHttpRequest正在调用onError,其http状态代码为0。所以我添加了CORS头,并给它一个200状态代码来解决这个问题。

如果ajax页面的返回不是正确的JSON字符串,我认为如果从代码中删除dataType : "json",问题就会得到解决。我注意到,如果提供了dataType : "json"并且返回的数据不是JSON类型,那么$.ajax()就不会进入成功函数。

PS
有些东西,比如AJAX设置关键字type, dataType, url等,不应该在双引号中。尽管代码即使使用当前的方式也能工作,但我提到的是正确的方式。

$.ajax({
      type      : methode,
      dataType  : "json",
      url       : url,
      async     : async,
      data      : donneesEnvoyees,
      timeout   : 60000,
      success   : function(data){
                alert('success');
      }
});

我想您已经在这个ajax调用中添加了一个success函数,您可以使用它根据结果使用不同的操作。

相关内容

  • 没有找到相关文章

最新更新