Там какой-либо простой способ состоит в том, чтобы отказаться от всех выдающихся запросов Ajax jQuery? Мое приложение способно к осуществлению большого количества одновременных запросов, таким образом, гонка становится проблематичной. Я вставил hackish решения (а именно, включая флаг, который проверяется после завершения запроса), но было бы намного более хорошо получить глобальную остановку вся выдающаяся функция запросов.
Назначить каждый ajax запрос как элемент массива:
var requests = [];
requests.push($.ajax({
type: 'POST',
url: '...',
success: successfunc
});
);
И убить:
$.each(requests, function(i, v) {
v.abort();
});
как говорили другие, используйте метод .abort (). Однако это работает ТОЛЬКО для вызовов в одном домене. как только вы входите в межсайтовые вызовы (с jsonp), тогда метод .abort () делегируется null, поэтому на самом деле он не срабатывает / не работает.
стоит отметить, так как это заставило меня бесконечное время отладки много маленькой луны назад :)
jim
Основываясь на решении Кена Редлера, я поместил это в свою инициализацию:
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.
XMLHttpRequest имеет функцию abort (). $ .ajax позволяет вам получить объект xhr. ведите учет всех невыполненных xhr и используйте xhr.abort ()
, если хотите завершить работу.
Я бы сказал, что все запросы ajax хранятся в массиве. Когда вам нужно убить, просто переберите все значения в массиве и вызовите abort (). Когда запрос завершен или прерван, просто вытяните его из массива.