如何在javascript中终止或取消异步调用?

如何在javascript中终止或取消异步调用?,javascript,asp.net-mvc-4,Javascript,Asp.net Mvc 4,我向MVC控制器发送以下请求: var datum = { param1: value, param2: value, param3: value }; $.ajax ({ type: "POST", contentType: "application/json; charset=utf-8", url: getAbsolutePath() + "Controller/MethodName", dataType: "json", data: JSON.stringify(d

我向MVC控制器发送以下请求:

var datum = { param1: value, param2: value, param3: value };

$.ajax
({
  type: "POST",
  contentType: "application/json; charset=utf-8",
  url: getAbsolutePath() + "Controller/MethodName",
  dataType: "json",
  data: JSON.stringify(datum),
  success: function (response) 
  {
    var result = response;
  }
});
有时候,回应需要花费太多的时间。我正在寻找一种方法来终止或取消这个请求。如何实现此目的?

您可以使用.abort取消请求:

var xhr = $.ajax({
    type: "POST",
    contentType: "application/json; charset=utf-8",
    url: getAbsolutePath() + "Controller/MethodName",
    dataType: "json",
    data: JSON.stringify(datum),
    success: function (response) {
        var result = response;
    }
});

xhr.abort();
如果请求花费的时间太长,可以使用ajax的timeout属性来取消请求


请参阅jquery。ajax返回规范化的XMLHttpRequest,只需使用其中止方法:

var xhr = $.ajax(params);
xhr.abort();

我的建议是,使用timeout属性:

$.ajax
({
   type: "POST",
   contentType: "application/json; charset=utf-8",
   url: getAbsolutePath() + "Controller/MethodName",
   timeout: 100000,   //cancels automatically after 100 seconds
   dataType: "json",
   data: JSON.stringify(datum),
   success: function (response) 
   {
     var result = response;
   }
 });

取消这个请求有什么意义?如果响应延迟太多,请让您的成功处理程序忽略响应。响应耗时太长,我的页面被卡住。直到响应到来。如果您的页面被卡住,那么您不是在进行异步调用。你发布的代码肯定是异步的,因此你的页面被卡住的唯一方式是通过你自己的其他机制,而你没有发布或描述过这一点。为什么建议使用timeout的人会得到否决票?我认为这是解决这个问题的一个有用的建议;这是一个很好的方法。