加载资源失败:Safari 上的请求超时
Posted
技术标签:
【中文标题】加载资源失败:Safari 上的请求超时【英文标题】:Failed to load resource: Request timed out on Safari 【发布时间】:2015-09-17 08:44:49 【问题描述】:我们的 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 秒后出现的,小于定义的超时时间。
在互联网上阅读了一些内容后,我看到了一些关于指定 no-cache 的答案,以便 safari 不会将 post 参数保留在缓存中。 我不能说我完全理解这一点,但我仍然尝试了以下方式:
$.ajax(
"type" : methode,
"headers" : "cache-control": "no-cache" , <-- added this line
"dataType" : "json",
"url" : url,
"async" : async,
"data" : donneesEnvoyees,
"timeout" : 60000
)
如你所料,我仍然遇到同样的错误。
你知道发生了什么吗?为什么这个错误只发生在 Safari 而不是其他浏览器上?如何解决?
【问题讨论】:
js变量'methode'、'url'、'async'、'donneesEnvoyees'的值是多少?你在哪里调用ajax?任何涉及正则表达式的地方? 方法是 POST 或 GET。 url 是动作,async 在所有请求中大多是“false”,“donneesEnvoyees”是 post 参数。我在提交时调用 Ajax,没有涉及正则表达式。 你的ajax有error()
函数吗?如果可以,您可以将其包含在问题中吗?
我想我遇到过这样的事情。能否给出服务器的预期返回值?
@AminJafari 我的 ajax 没有 'error()' 函数,但有 'fail()' 函数。如果服务器发回一些数据,错误会显示在带有响应的对话框中,但在我的情况下,服务器不会发回任何数据。
【参考方案1】:
在您的 ajax 设置中设置 async: true
。它将使浏览器保持连接并在收到响应后关闭。
【讨论】:
这适用于可以是异步的请求,但有时它是不可能的。无论如何,为什么 safari 会对同步请求做出这种反应? 根据我的经验和研究,Safari 只是自己覆盖了 ajax 设置上提供的超时,使用 10 秒。 奖励您赏金,因为您的回答有助于解决某些请求(不是全部)。我仍然不明白发生了什么以及如何真正修复它(也有同步请求)。【参考方案2】:如果您从代码中删除dataType : "json"
,我认为您的问题将得到解决如果您的ajax 页面的返回不是正确的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
函数,您可以使用它来根据结果使用不同的操作。
【讨论】:
返回值始终是正确的 JSON 字符串,所以我认为这不是问题所在。关于你的假设,我没有“成功()”功能,但有“完成()”功能【参考方案3】:我遇到了同样的问题。通过将 CORS 标头和响应状态代码添加为 200
进行了修复 res.header('Access-Control-Allow-Origin', '*');
res.status(200);
方法和原因
通过阅读 jQuery 的源代码深入了解错误后,我意识到真正的问题是 jQuery+Safari 中的 XMLHttpRequest 调用 onError 并带有 http 状态码0
。所以我添加了CORS头并给它一个200状态码来解决问题。
【讨论】:
似乎是一个很好的解决方案!但是什么是资源? .-) 必须在代码中的何处设置?听起来这是“相同”的问题:***.com/questions/53732617/…?以上是关于加载资源失败:Safari 上的请求超时的主要内容,如果未能解决你的问题,请参考以下文章