Есть ли простой способ отказаться от всех выдающихся запросов JQuery AJAX? Мое приложение способно снимать много одновременных запросов, поэтому гонка становится проблематичной. Я включил хакерские решения (а именно, добавив флаг, который проверяется при завершении запроса), но было бы гораздо лучше получить глобальную остановку всех функций выдающихся запросов.jQuery отказаться от всех выдающихся запросов AJAX
ответ
Присвоить каждый запрос Ajax в качестве элемента массива:
var requests = [];
requests.push($.ajax({
type: 'POST',
url: '...',
success: successfunc
});
);
И убить:
$.each(requests, function(i, v) {
v.abort();
});
Я бы сказал, хранить все запросы ajax в массиве. Когда вам нужно убить, просто проведите все значения в массиве и вызовите abort(). Когда запрос завершается или прерывается, просто выпадайте из массива.
Функция XMLHttpRequest имеет функцию abort(). $ .ajax позволяет вам получить доступ к объекту xhr. вести запись всех выдающихся xhr's и идти xhr.abort()
для любого, что вы хотите прекратить.
, как другие говорили, использовать метод .abort(). Однако это ТОЛЬКО работает при вызовах в пределах одного домена. после того, как вы входите в межсайтовые вызовы (с jsonp), тогда метод .abort() делегируется null, поэтому обычно не срабатывает/работает.
стоит отметить, так как это вызвало у меня бесконечное время отладки много маленькая луна назад :)
Джима
Прохладная информация, спасибо за это хедз-ап , – Anders
anders - удовольствие ... (tho 'проверяет последний статус на IE, поскольку это было главным образом XMLHttpRequest в IE, что было проблемой при попытке сделать его агностиком браузера в моем случае). я, кажется, помню, что для прерывания «timeout» установлено значение 0 при вызовах на сайте. в любом случае .. :) –
на основе решения Кена Redler, я положил это в моей инициализации:
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
}
})
I поставьте фрагмент с new_request_list
, чтобы не допустить переполнения глобальной переменной с завершенными объектами XHR.
Я бы поместил функцию очистки в '. $ .ajaxSetup' или' xhr.onreadystatechange', но я обеспокоен тем, что это будет мешать тому, что jQuery делает сам по себе. Это решение работает нормально. –
Я нашел следующее на jsfiddle. Он в основном такой же, как и выше, за исключением того, что он удалит каждый запрос после его завершения. Вышеприведенные решения просто добавляют к массиву. Поэтому со временем это может стать огромным, если вы делаете много вызовов ajax. Вы вызываете $.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);
}
}
});
- 1. Получение всех выдающихся запросов Facebook для пользователя
- 2. Программно отказаться от всех подключений
- 3. Пытается отслеживать количество выдающихся запросов AJAX в firefox
- 4. Поиск выдающихся частот от FFT
- 5. htaccess <Directory> Отказаться от всех
- 6. отказаться от ajax submit, если поля пусты jQuery
- 7. Мониторинг всех запросов ajax для конкретного ответа
- 8. Отказаться от всех тем сразу от Firebase Messaging
- 9. Mootools: дождитесь завершения всех запросов ajax.
- 10. Невозможно отказаться от всех областей div, которые были преобразованы CSS
- 11. Защита запросов jQuery AJAX
- 12. SAPUI5 и JQuery draggable - отказаться от смешивания
- 13. Добавить пользовательский HTTP-заголовок для всех запросов jQuery AJAX
- 14. Максимальное количество выдающихся loadLeaderboardsWithCompletionHandler: от одного клиента iOS?
- 15. Отказаться от динамических наблюдений
- 16. Множественный выбор Отказаться от формы
- 17. Как отказаться от изменений?
- 18. Tomcat отказаться от соединений после определенного количества запросов
- 19. несколько запросов ajax с jquery
- 20. Предотвращение нескольких запросов от ajax
- 21. Отказаться от DataGridView от DoubleClick
- 22. Отказаться от прокси от POSTing
- 23. Отказаться от клиента
- 24. Отказаться от почтового пистолета
- 25. улов отказаться от обещания
- 26. Как отказаться от подписки?
- 27. Отказаться от RxJS Observables
- 28. Отказаться от привилегий root?
- 29. Отказаться от API
- 30. MonoTouch Отказаться от событий
Спасибо. Кажется, это трюк. Я выбрал несколько другую реализацию, которая подробно описана здесь (http://stackoverflow.com/questions/3313059/jquery-abandon-all-outstanding-ajax-requests/3313954#3313954) –