在对ASP.NET MVC Action的AJAX请求期间有网络请求超时时会发生什么

San*_*tak 6 asp.net ajax asp.net-mvc networking asp.net-mvc-2

如标题中所述,我想知道将AJAX请求发送到控制器操作时会发生什么,并且在此期间,在请求完成之前几毫秒发生网络超时.

Reply from <Server IP>: bytes=32 time=31ms TTL=122
Request timed out
Reply from <Server IP>: bytes=32 time=28ms TTL=122
Run Code Online (Sandbox Code Playgroud)

考虑到超时仅发生几毫秒,这会对我的AJAX请求产生什么影响?

这是我们在我们的应用程序中遇到的问题的延续,正如在这个SO问题中所解释的那样,我想知道它们是否以某种方式相关.

我搜索过类似的问题,但找不到任何有用的东西.

编辑:除了对AJAX的影响外,它会影响动作方法的行为(服务器)吗?

Rom*_*ews 6

无论超时是否仅发生几毫秒或更长时间,请求都将失败.success您的AJAX请求的回调函数将不会被执行,并且请求将以执行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
        } 
    }
});?
Run Code Online (Sandbox Code Playgroud)

此外,您还可以complete通过检查第二个参数是否为字符串来检查请求是否在回调函数中超时(以类似于上面所示的方式),timeout如果请求超时,它将具有该值.

另外,请注意:

超时时间从$ .ajax调用点开始; 如果其他几个请求正在进行且浏览器没有可用的连接,则请求可能会在发送之前超时.

请求超时通常保留为默认值或使用$ .ajaxSetup()设置为全局默认值,而不是使用timeout选项覆盖特定请求.

我建议你使用像fiddler这样的替代HTTP/s流量监控工具来找到第二个请求背后的谜团.

更多信息:jQuery ajax文档


小智 4

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