在AJAX请求ASP.NET MVC Action

时间:2016-08-04 12:14:50

标签: 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

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

这是我们在应用程序中遇到的问题的继续,如本SO question中所述,我想知道它们是否有某种关联。

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

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

3 个答案:

答案 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)来查找第二个请求背后的谜团。

更多信息:jQuery ajax documentation

答案 1 :(得分:3)

请求将&#34;失败&#34;,这意味着它将进入您的AJAX请求的onError状态。状态代码将为0,因为服务器没有响应来确定实际状态代码(例如200 OK或500内部服务器错误)。

答案 2 :(得分:0)

如果超时,您的成功回调将不会执行,因此您必须在客户端编写错误回调来处理此类问题。

如果超时,您必须从服务器端引发异常,以便它作为一种错误回到客户端,这是您可以处理超时的一种方法。