Прервать ajax-запросы перед отправкой следующего? (JQuery)

StackOverflow https://stackoverflow.com/questions/1810751

  •  05-07-2019
  •  | 
  •  

Вопрос

У меня есть отчет в нашей внутренней системе, который может возвращать данные от 1 дня до полных лет. Из-за этого отчет может занять 0,5 секунды или более 45 секунд, чтобы сгенерировать все.

Отчет позволяет вам модифицировать кучу фильтров, каждый из которых при модификации запускает ajax-запрос очень просто:

var ax = $.ajax({
    type: "GET",
    url: "/blah",
    data: values,
    success: function(data) { .. }
});

Теперь проблема возникает, когда наш замечательный пользователь заявляет "Ой, подождите! Я хочу, чтобы это было с февраля, а не с января! ». Но запрос уже происходит, так как в январе много данных! Итак, пользователь переключает опцию даты на февраль, и я вижу, как консоль Javascript отправляет второй запрос. Теперь у нас два участника, и это гонка!

  

/ report /? start_date = January (загрузка продолжается ...)

     

/ report /? start_date = February (Эй, я тоже здесь сейчас!)

Затем обычно меньший загружается раньше, но затем загружается другой, и он перезаписывает тот, который у них уже был .. hmm:)

Я пытался использовать ax.abort () , помещенный после объявления переменной ax , как упоминалось здесь , но, похоже, это не работает.

Так что теперь мне интересно, что мне не хватает? Я просто хочу убить текущий запрос (на стороне клиента, я знаю, что ничего не могу с этим поделать на стороне сервера), как только пользователь изменит некоторые параметры, чтобы у меня не было 2 или более запросов одновременно , Установка async: false не является опцией, поскольку она просто блокирует пользователя.

Заранее благодарим за помощь.

Это было полезно?

Решение

Вы можете взглянуть на плагин ajaxmanager .

Другие советы

Я думаю, что попытка прервать предыдущий запрос не является хорошим решением. Возможно, вам следует использовать простой обходной путь - для каждого ajax-запроса увеличить счетчик в javascript и передать его в обратный вызов ajax. Когда происходит обратный вызов, проверьте, совпадает ли счетчик ответа с текущим значением счетчика. Если нет, то проигнорируйте ответ - он был вызван устаревшим событием щелчка.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top