2016-08-04 123 views
6

如标题所述,我想知道将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的影响,它会影响动作方法的行为(服务器)吗?

回答

3

该请求将“失败”,这意味着它将输入您的AJAX请求的onError状态。状态码将为0,因为服务器没有确定真实状态码的响应(例如200 OK或500 Internal Server Error)。

6

无论超时是否仅发生几毫秒或更长时间,请求都会失败。您的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找到第二个请求背后的玄机。

更多信息:jQuery ajax documentation

+0

感谢您的详细解答。至于您关于流量监控的建议,fiddler/chrome网络选项卡仅显示来自客户端的单个请求。 –

0

在超时的情况下你的成功回调不会执行,所以你必须写在客户端的错误回调来处理这些问题。

在超时的情况下,您必须从服务器端引发一个异常,以便它将返回给客户端,因为错误是您可以处理超时的一种方式。

相关问题