отказ jQuery все выдающиеся запросы Ajax

Там какой-либо простой способ состоит в том, чтобы отказаться от всех выдающихся запросов Ajax jQuery? Мое приложение способно к осуществлению большого количества одновременных запросов, таким образом, гонка становится проблематичной. Я вставил hackish решения (а именно, включая флаг, который проверяется после завершения запроса), но было бы намного более хорошо получить глобальную остановку вся выдающаяся функция запросов.

7
задан Steven 22 July 2010 в 20:20
поделиться

5 ответов

Назначить каждый ajax запрос как элемент массива:

var requests = [];

requests.push($.ajax({
    type: 'POST',
    url: '...',
    success: successfunc
    });
);

И убить:

$.each(requests, function(i, v) {
    v.abort();
});
12
ответ дан 6 December 2019 в 08:13
поделиться

как говорили другие, используйте метод .abort (). Однако это работает ТОЛЬКО для вызовов в одном домене. как только вы входите в межсайтовые вызовы (с jsonp), тогда метод .abort () делегируется null, поэтому на самом деле он не срабатывает / не работает.

стоит отметить, так как это заставило меня бесконечное время отладки много маленькой луны назад :)

jim

3
ответ дан 6 December 2019 в 08:13
поделиться

Основываясь на решении Кена Редлера, я поместил это в свою инициализацию:

window.requests = []
$.ajaxSetup({
  beforeSend: function(xhr){
    var new_request_list = [xhr]
    $.each(window.requests, function(k,v){
      if(v.readyState != 4) new_request_list.push(v)
    })
    window.requests = new_request_list
  }
})

Я поместил фрагмент с new_request_list только для того, чтобы глобальная переменная не переполнялась завершенными объектами XHR.

3
ответ дан 6 December 2019 в 08:13
поделиться

XMLHttpRequest имеет функцию abort (). $ .ajax позволяет вам получить объект xhr. ведите учет всех невыполненных xhr и используйте xhr.abort () , если хотите завершить работу.

2
ответ дан 6 December 2019 в 08:13
поделиться

Я бы сказал, что все запросы ajax хранятся в массиве. Когда вам нужно убить, просто переберите все значения в массиве и вызовите abort (). Когда запрос завершен или прерван, просто вытяните его из массива.

1
ответ дан 6 December 2019 в 08:13
поделиться
Другие вопросы по тегам:

Похожие вопросы: