Автозаполнение пользовательского интерфейса jQuery: как запустить асинхронный процесс и завершить его до его завершения - PullRequest
2 голосов
/ 14 декабря 2010

Я использую автозаполнение пользовательского интерфейса jQuery для создания интерфейса поиска.

Я определил пользовательскую функцию, которая возвращает результаты поиска и автоматически обновляет их при нажатии клавиш, однако иногда эта пользовательская функция не завершается до нажатия следующей клавиши (т. Е. Она все еще обрабатывает «Стирать», когда яя уже написал "Washi" (на пути к написанию "Washington").

Я бы хотел, чтобы при каждом вызове события автозаполнения "source" отменялась предыдущая функция (Wash) и запускалась новая функция (WashiСо следующей функцией отмены вызова (Washi) и функцией запуска (Washin) и т. Д.

Как это делается?

1 Ответ

3 голосов
/ 14 декабря 2010

Вы должны быть в состоянии сделать что-то вроде этого:

var lastXhr;
$( "#myAutocomplete" ).autocomplete({
    source: function( request, response ) {
        if (lastXhr) lastXhr.abort();
        lastXhr = $.getJSON( "search.php", request, function( data, status, xhr ) {
            if ( xhr === lastXhr ) {
                response( data );
            }
        });
    }
});

lastXhr var хранит самый последний запрос xhr.Если есть один набор и вызывается функция источника, то он прерывает запрос lastXhr и создает новый.Когда возвращается запрос ajax, убедитесь, что он соответствует lastXhr, если нет, то он не вызывает функцию response().

...