jQuery ui AutoComplete: как вы начинаете асинхронный процесс и бросить его, прежде чем он закончится

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

Вопрос

Я использую AutoComplete jQuery ui, чтобы построить интерфейс поиска.

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

Я хотел бы каждый звонок в событие AutoComplete «Source», чтобы отменить предыдущую функцию (промыть) и начать новую функцию (WADI). С следующей функцией отмены вызовов (WADI) и запущенной функции (Washin) и так далее.

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

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

Решение

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

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() функция.

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