2009-11-27 4 views
1

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

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

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

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

/отчет /? Start_date = января (Still Loading ...)

/отчет /? Start_date = февраля (Эй, я здесь тоже!)

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

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

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

Заранее за вашу помощь.

ответ

1

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

+0

Выглядит очень прост в использовании, спасибо. Попробуем это – Bartek

+0

Это получилось отлично. Спасибо за ссылку – Bartek

3

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

+0

Хех, не плохое решение. Довольно просто, но любопытно, как это работает в приложении. Придется попробовать завтра – Bartek

+0

хорошая идея! попробуем реализовать это в моей –