Игнорирование старых множественных асинхронных запросов AJAX - PullRequest
4 голосов
/ 17 марта 2010

У меня есть собственный скрипт автозаполнения javascript, который отправляет на сервер несколько асинхронных запросов ajax. (Каждый раз, когда нажимается клавиша.)

Я заметил, что иногда более ранний запрос ajax будет возвращаться после более поздних запросов, что приводит к путанице.

То, как я сейчас это делаю, заключается в том, что у меня есть счетчик, который увеличивается с каждым запросом ajax. Запросы, которые возвращаются с меньшим количеством, игнорируются.

Мне интересно: это правильно? Или есть лучший способ решения этой проблемы?

Заранее спасибо,

Travis

1 Ответ

8 голосов
/ 17 марта 2010

Вы можете сохранить «глобальный» currentAjaxRequest, который содержит структуру последнего XHR-запроса. Затем вы можете abort текущий запрос, когда вы делаете новый.

Например:

var currentAjaxRequest = null;

function autoCompleteStuff() {
    if(currentAjaxRequest !== null) {
        currentAjaxRequest.abort();
    }

    currentAjaxRequest = $.get(..., function(...) {
        currentAjaxRequest = null;

        ...
    });
}

Чтобы избежать конфликтов имен, при необходимости оберните их в анонимно выполняемую функцию.

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