浏览器在ajax请求之后等待多久?
在服务器回答请求之前,在显示错误之前,浏览器等待多久? 现在可以无限制吗?
如果您正在使用jQuery $ .ajax调用,则可以设置timeout属性来控制请求以超时状态返回之前的时间量。 超时设置以毫秒为单位,所以将其设置为非常高的值。 你也可以将它设置为0来表示“无限”,但在我看来,你应该设置一个高值。
注意:unlimited是默认的,但大多数浏览器都有默认的超时时间。
当由于超时而返回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 } } });
是和不是。 是的,服务器可以做到这一点,或configuration这样做,没有浏览器(我不知道版本/分销商的具体情况)可能会超时启用。
有两个解决scheme,但通过HTTP实现/模拟:
- 如果这是一个简单的长时间运行的脚本,并且您正在等待结果,那么您应该像前面提到的海报那样做,并且使用asynchronous处理和服务器轮询来获得结果,这将是一个更加可靠的解决scheme。 例如:来自image processing服务器端的缩略图脚本:用户上传服务器返回200的图像和“作业ID”。 客户端(javascript ^^)然后可以使用JobID来请求作业状态/结果。
- 如果你的目标是像浏览器和服务器之间的实时连接(单向连接,一旦请求是由浏览器做出的,没有进一步的信息可以发送,而不使用新的请求(ajax ^^))),这称为长轮询/反向ajax,可以用于通过http进行实时通信。 有几种技术并行地使用两个长轮询请求,一旦其中一个超时,第二个就成为主动,第一个尝试重新连接。
你能解释一下你想达到的目标吗?你在服务器上有一个长时间运行的过程吗?你想在本地机器上更改设置吗?或者你是否想要pipe理大量数据的用户?
浏览器等待多长时间取决于许多因素,例如发生超时的地方 – TCP级别,服务器还是本地浏览器?
如果你在服务器上有一个长时间运行的进程,并且你想在之后更新一个网页,那么处理这个网页的典型方法是asynchronous运行这个长进程,并在完成时通知客户端,例如有一个轮询服务器的ajax调用,或使用HTTP 1.1并向客户端发送通知stream。
在这两种情况下,连接都可能被closures,所以客户仍然需要重新打开它的能力。
我发现,在正常(HTML页面)请求的情况下,浏览器在cca之后运行超时。 30秒 这很重要,因为其他参与者可能会遵循它:代理,路由器(路由器在这个游戏中玩吗?我不确定)。 我使用4秒长的服务器端延迟(如果没有发送到客户端),我的AJAX客户端立即执行另一个HTTP请求(我在本地networking,没有互联网延迟)。 4秒足够长的时间,以不使服务器和networking频繁轮询超载,并足够短的情况下,当不知何故一个民意测验落在客户端无法检测和处理的行。
此外,彗星(长HTTP请求)还有其他问题:浏览器对同时HTTP请求数量的限制,处理客户端事件(必须立即发送到服务器),服务器/networking宕机检测和恢复,多用户处理等等