У меня проблема, при отправке формы все активные запросы AJAX сбой, и это вызывает событие ошибки.
Как остановить все активные запросы ajax в jQuery без события ошибки trigerring?
Каждый раз, когда вы создаете ajax-запрос, вы можете использовать переменную для его хранения:
var request = $.ajax({
type: 'POST',
url: 'someurl',
success: function(result){}
});
Затем вы можете прервать запрос:
request.abort();
Вы можете использовать массив, отслеживающий все ожидающие ajax-запросы, и при необходимости прервать их.
Следующий фрагмент позволяет вам поддерживать список ( пул ) запросов и отменять их все при необходимости. Лучше всего размещать в
<HEAD>
своем html, прежде чем будут сделаны любые другие вызовы AJAX.источник
Object doesn't support property or method 'indexOf'
? Я подозреваю, что это может быть stackoverflow.com/a/2608601/181971 или, может быть, просто заменить на stackoverflow.com/a/2608618/181971 ?Использование ajaxSetup не является правильным , как отмечено на его странице документации. Он только устанавливает значения по умолчанию, и если некоторые запросы переопределяют их, будет беспорядок.
Я опаздываю на вечеринку, но просто для дальнейшего использования, если кто-то ищет решение той же проблемы, вот мое мнение, вдохновленное и во многом идентичное предыдущим ответам, но более полное
источник
Вот что я сейчас использую для этого.
Примечание: _.each of underscore.js присутствует, но явно не обязательно. Я просто ленивый и не хочу менять его на $ .each (). 8P
источник
aboutAll
следует удалить элементы из массива. Плюс, когда запрос завершен, он должен удалить себя из списка.Дайте каждому запросу xhr уникальный идентификатор и сохраните ссылку на объект в объекте перед отправкой. Удалить ссылку после завершения запроса xhr.
Чтобы отменить все запросы в любое время:
Возвращает уникальные идентификаторы отмененного запроса. Только для целей тестирования.
Рабочая функция:
Возвращает объект с единственной функцией, которую можно использовать для добавления дополнительных функций при необходимости.
источник
Я нашел это слишком легко для нескольких запросов.
шаг1: определить переменную в верхней части страницы:
step2: установить beforeSend во всех запросах ajax:
шаг 3: используйте его там, где вам нужно:
источник
Я расширил mkmurray и ответ SpYk3HH выше, чтобы xhrPool.abortAll мог прервать все ожидающие запросы данного URL :
Использование такое же, за исключением того, что abortAll теперь может опционально принимать URL-адрес в качестве параметра и отменяет только ожидающие вызовы этого URL-адреса.
источник
У меня были некоторые проблемы с кодом Энди, но он дал мне отличные идеи. Первая проблема заключалась в том, что мы должны выталкивать любые объекты jqXHR, которые успешно завершены. Я также должен был изменить функцию abortAll. Вот мой последний рабочий код:
Мне не понравился способ работы ajaxComplete (). Независимо от того, как я пытался настроить .ajaxSetup, он не работал.
источник
Я обновил код, чтобы он работал у меня
источник
Вбрасывание моей шляпы. Предлагает
abort
иremove
методы противxhrPool
массива, и не склонен к проблемам сajaxSetup
переопределениями.источник
Сделайте пул всех запросов ajax и прервите их .....
источник
Лучше использовать независимый код .....
источник
Не менее важно: скажем, вы хотите выйти из системы и генерировать новые запросы с таймерами: потому что данные сеансов обновляются с каждым новым загрузчиком (возможно, вы можете сказать, что я говорю на Drupal, но это может быть любой сайт, который использует сеансы) .. Мне пришлось пройтись по всем моим сценариям с поиском и заменой, потому что у меня было множество вещей, работающих в разных случаях: глобальные переменные вверху:
источник
всякий раз, когда вы хотите прервать все запросы AJAX, вам просто нужно позвонить по этой линии
источник
Существует фиктивное решение, которое я использую для отмены всех запросов AJAX. Это решение перезагрузить всю страницу. Это решение хорошо, если вам не нравится присваивать ID каждому запросу ajax, и если вы делаете запросы ajax внутри цикла for. Это обеспечит уничтожение всех запросов AJAX.
источник
Вот как это можно сделать при любом нажатии (полезно, если на вашей странице выполняется много вызовов AJAX, и вы пытаетесь отойти от нее).
источник