jQuery ui AutoComplete: как вы начинаете асинхронный процесс и бросить его, прежде чем он закончится
-
09-10-2019 - |
Вопрос
Я использую 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()
функция.