Прервать ajax-запросы перед отправкой следующего? (JQuery) - PullRequest
1 голос
/ 28 ноября 2009

У меня есть отчет в нашей внутренней системе, который может возвращать данные от 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 (Эй, я тоже здесь сейчас!)

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

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

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

Заранее спасибо за помощь.

Ответы [ 2 ]

3 голосов
/ 28 ноября 2009

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

1 голос
/ 28 ноября 2009

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...