当在向ASP.NET MVC的AJAX请求中发生网络请求超时时会发生什么操作
如标题所述,我想知道将AJAX请求发送到控制器操作时会发生什么,并且在此期间,在请求完成之前,网络超时发生几ms。当在向ASP.NET MVC的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的影响,它会影响动作方法的行为(服务器)吗?
该请求将“失败”,这意味着它将输入您的AJAX请求的onError
状态。状态码将为0,因为服务器没有确定真实状态码的响应(例如200 OK或500 Internal Server Error)。
无论超时是否仅发生几毫秒或更长时间,请求都会失败。您的AJAX请求的success
回调函数将不会执行,并且请求将以执行complete
回调函数结束。默认情况下,所有AJAX请求的超时时间为0毫秒(无限制),但会达到浏览器的默认超时时间。
当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
回调函数中(以类似于上面所示的方式)超时,如果请求超时,它将具有值timeout
。
此外,请注意这一点:
超时时间开始于$就调用提出的观点;如果有多个其他请求正在进行,并且浏览器没有可用连接,则可能会在请求发送之前超时。
请求超时通常或者保留为默认值,或者使用$ .ajaxSetup()设置为全局默认值,而不是使用超时选项对特定请求重写。
我会建议你使用替代HTTP/s的流量监测工具,如fiddler找到第二个请求背后的玄机。
在超时的情况下你的成功回调不会执行,所以你必须写在客户端的错误回调来处理这些问题。
在超时的情况下,您必须从服务器端引发一个异常,以便它将返回给客户端,因为错误是您可以处理超时的一种方式。
感谢您的详细解答。至于您关于流量监控的建议,fiddler/chrome网络选项卡仅显示来自客户端的单个请求。 –