如标题中所述,我想知道将AJAX请求发送到控制器操作时会发生什么,并且在此期间,在请求完成之前几毫秒发生网络超时。
Reply from <Server IP>: bytes=32 time=31ms TTL=122
Request timed out
Reply from <Server IP>: bytes=32 time=28ms TTL=122
考虑到超时仅发生几毫秒,这会对我的AJAX请求产生什么影响?
这是我们在应用程序中遇到的问题的继续,如本SO question中所述,我想知道它们是否有某种关联。
我搜索过类似的问题,但找不到任何有用的东西。
编辑除了对AJAX的影响外,它是否会影响操作方法的行为(服务器)?
答案 0 :(得分:6)
无论超时是否仅发生几毫秒或更长时间,请求都将失败。您的AJAX请求的success
回调函数将不会被执行,请求将以执行complete
回调函数结束。默认情况下,所有AJAX请求都将具有0ms(无限制)的超时,但它将达到浏览器的默认超时。
当AJAX请求超时时,将调用error
回调函数。此函数的第二个参数是描述错误类型的字符串,在这种情况下,它将具有值timeout
。您可以通过处理此回调函数并通过在AJAX请求正文中指定超时值(如果未指定,对默认值起作用)来处理请求超时:
$.ajax({
...
timeout: 5000, //specify the timeout value in milliseconds
error: function(jqXHR, textStatus, errorThrown) {
if(textStatus==="timeout") {
//code to execute when timeout occurs
}
}
});
此外,您还可以检查请求是否已在complete
回调函数中超时(以与上面类似的方式),方法是检查第二个参数是字符串,它的值为{{ 1}}如果请求超时。
另外,请注意:
超时期限从$ .ajax调用开始;如果其他几个请求正在进行且浏览器没有可用的连接,则请求可能会在发送之前超时。
请求超时通常保留为默认值或使用$ .ajaxSetup()设置为全局默认值,而不是使用超时选项覆盖特定请求。
我建议您使用其他HTTP / s流量监控工具(如fiddler)来查找第二个请求背后的谜团。
答案 1 :(得分:3)
请求将&#34;失败&#34;,这意味着它将进入您的AJAX请求的onError
状态。状态代码将为0,因为服务器没有响应来确定实际状态代码(例如200 OK或500内部服务器错误)。
答案 2 :(得分:0)
如果超时,您的成功回调将不会执行,因此您必须在客户端编写错误回调来处理此类问题。
如果超时,您必须从服务器端引发异常,以便它作为一种错误回到客户端,这是您可以处理超时的一种方法。