在全局范围内中止所有jQuery AJAX请求

10 浏览
0 Comments

在全局范围内中止所有jQuery AJAX请求

是否有一种方法可以在没有请求对象的情况下全局中止所有Ajax请求?\n我之所以问这个问题,是因为我们的应用程序非常复杂,我们使用setTimeOut()在后台运行多个不同的Ajax请求。如果用户点击某个按钮,我们需要停止所有正在进行的请求。

0
0 Comments

问题原因:在这段代码中,$.xhrPool.abortAll方法只能使用一次,因为$.xhrPool = [];会销毁该方法。当再次调用$.xhrPool.abortAll时,它将不起作用,因为你用一个空数组[]覆盖了$.xhrPool,这个空数组没有abortAll属性。

解决方法:可以使用$.xhrPool.length = 0;来代替$.xhrPool = [];,这样就可以多次使用abortAll方法了。

以下是整理后的文章:

你可以使用下面的脚本:

// $.xhrPool and $.ajaxSetup are the solution
$.xhrPool = [];
$.xhrPool.abortAll = function() {
    $(this).each(function(idx, jqXHR) {
        jqXHR.abort();
    });
    $.xhrPool = [];
};
$.ajaxSetup({
    beforeSend: function(jqXHR) {
        $.xhrPool.push(jqXHR);
    },
    complete: function(jqXHR) {
        var index = $.xhrPool.indexOf(jqXHR);
        if (index > -1) {
            $.xhrPool.splice(index, 1);
        }
    }
});

http://jsfiddle.net/s4pbn/3/上检查结果。

你从这里复制并粘贴到这里。虽然我欣赏jsfiddle,但是-1因为你没有给予该问题应有的信誉。现在来引用一个电影台词:“不尊重你,不尊重你的牛,不尊重你的叔叔...” -木兰

这里的abortAll方法只能使用一次,因为$.xhrPool = [];会销毁该方法。如果你想要多次使用它,可以使用$.xhrPool.length = 0;代替。

有关详情,请参考stackoverflow.com/questions/1232040/…

当你再次调用$.xhrPool.abortAll时,它将不起作用,因为你用一个空数组[]覆盖了$.xhrPool,这个空数组没有abortAll属性。

我遇到了TypeError: jqXHR.abort is not a function错误。

0
0 Comments

在使用jQuery的AJAX请求时,如果没有追踪到请求的句柄,是无法终止所有活动的Ajax请求的。但是,如果追踪到了句柄,那么可以通过循环遍历句柄,并在每个句柄上调用.abort()来终止请求。

下面是一个示例代码,演示了如何追踪并终止所有的jQuery AJAX请求:

// 追踪AJAX请求句柄的数组
var ajaxHandles = [];
// 发起一个AJAX请求,并将句柄存储到数组中
var request1 = $.ajax({
  url: "example.com/api",
  method: "GET",
  success: function(response) {
    // 处理响应数据
  }
});
ajaxHandles.push(request1);
// 发起另一个AJAX请求,并将句柄存储到数组中
var request2 = $.ajax({
  url: "example.com/api",
  method: "POST",
  data: { name: "John" },
  success: function(response) {
    // 处理响应数据
  }
});
ajaxHandles.push(request2);
// 终止所有的活动AJAX请求
$.each(ajaxHandles, function(index, request) {
  request.abort();
});

通过将AJAX请求的句柄存储到一个数组中,我们可以追踪每个请求,并在需要时调用.abort()方法来终止请求。在上面的示例代码中,我们发起了两个AJAX请求并将它们的句柄存储到ajaxHandles数组中。然后,通过使用$.each()方法遍历数组,并在每个句柄上调用.abort()方法来终止请求。

通过这种方法,我们可以全局地终止所有活动的jQuery AJAX请求,以便我们可以在需要时中止它们的执行。

0
0 Comments

在使用jQuery进行AJAX请求时,有时候需要在请求还未完成时中断它们。为了实现这个目的,可以使用`abort()`方法来取消请求。以下是一个使用`abort()`方法的示例代码:

var request = $.ajax({
    type: 'POST',
    url: 'someurl',
    success: function(result){..........}
});
request.abort();

在这个例子中,首先创建了一个名为`request`的变量来存储AJAX请求。然后,可以通过调用`abort()`方法来取消请求。通过这种方式,可以在任何时候中断请求。

在解决这个问题之外,还可以参考以下文章:

- [Aborting Ajax](http://javascript.about.com/library/blajax11.htm)

0