浏览器在 Ajax 请求后会等待多久?

在服务器响应请求之前,浏览器可以等待多长时间才显示错误?这次可以不受限制吗?

92232 次浏览

你能解释一下你想要达到什么样的效果吗? 你在服务器上有一个长时间运行的进程吗? 你想仅仅在一台本地机器上改变设置吗? 或者你想要一种方法来管理大量的用户?

浏览器会等待多长时间取决于很多因素,例如超时发生的位置——是在 TCP 层、服务器还是本地浏览器?

如果你在服务器上有一个长时间运行的进程,你想在之后更新一个网页,典型的处理方法是异步运行这个长时间的进程并在完成时通知客户端,例如使用 ajax 调用轮询服务器,或者使用 HTTP 1.1并向客户端提供通知流。

无论哪种情况,连接仍然可能被关闭,因此客户端仍然需要重新打开它的能力。

是也不是。是的,服务器可以这样做或配置这样做,没有浏览器(我不知道版本/分发服务器的细节)可能有超时启用。

不过,有两种解决方案可以通过 HTTP 实现/模拟这一点:

  • 如果这是一个简单的长时间运行的脚本,你在等待结果,这不是正确的方法,你应该像前面的帖子提到的那样,使用异步处理和服务器轮询来获得结果,这将是一个更加确定的解决方案。例如: 一个来自图像处理器服务器端的缩略脚本: 用户上传一个图像,服务器立即返回一个200和一个“作业 ID”。然后客户端(javascript ^ ^)可以使用 JobID 请求作业状态/结果。
  • 如果你的目标是在浏览器和服务器之间建立实时连接(单向连接,一旦浏览器发出请求,没有新的请求(ajax ^ ^)就不能发送进一步的信息) ,这就是所谓的长轮询/反向 ajax,可以通过 http 进行实时通信。有几种并行使用2个长轮询请求的技术,这样一旦其中一个超时,第二个就会变成活动的,第一个就会尝试重新连接。

我发现,在正常(HTML 页面)请求的情况下,浏览器会在 cca 之后超时。30秒。这很重要,因为其他参与者可能会遵循它: 代理,路由器(路由器在这个游戏中玩吗?我不确定)。我正在使用 4秒长服务器端延迟(如果没有任何东西要发送到客户端) ,我的 AJAX 客户端立即执行另一个 HTTP 请求(我在本地网络上,没有因特网延迟)。4秒的时间足够长,不会让频繁轮询的服务器和网络超载,也足够短,因为在这种情况下,有一个轮询从客户机无法检测和处理的行中掉出来。

此外,还有其他问题与彗星(长 HTTP 请求) : 浏览器的同时 HTTP 请求的数量限制,客户端事件的处理(必须立即发送到服务器) ,服务器/网络故障检测和恢复,多用户处理等。

如果您使用的是 jQuery $。Ajax 调用可以设置 timeout 属性来控制请求返回超时状态之前的时间量。超时时间以毫秒为单位设置,因此只需将其设置为非常高的值即可。您也可以将其设置为0表示“无限”,但在我看来,您应该只设置一个较高的值。

注意: 无限是 实际上是默认值,但大多数浏览器有默认的超时将被击中。

当由于超时而返回一个 ajax 调用时,它将返回一个错误状态“ timeout”,如果需要的话,您可以使用单独的用例来处理这个错误状态。

因此,如果你想设置一个3秒的超时,这里处理超时是一个例子:

$.ajax({
url: "/your_ajax_method/",
type: "GET",
dataType: "json",
timeout: 3000, //Set your timeout value in milliseconds or 0 for unlimited
success: function(response) { alert(response); },
error: function(jqXHR, textStatus, errorThrown) {
if(textStatus==="timeout") {
alert("Call has timed out"); //Handle the timeout
} else {
alert("Another error was returned"); //Handle other error type
}
}
});​