Скрипт не успевает выполняняться?

Сори за формулировку вопроса. Пытаюсь реализовать "живой поиск". После каждого введенного символа отправляется ajax, ну и выводит результаты. Если быстро набирать, получается что то типо такого:
p-FzQYe4QPSH1LvaZpOtuw.png

Код запроса
$('input[name=clientsearch]').on('input',function(e){

        var find = $(this).val();
        if(find.length == 0){
            $('.clientsearch ul').empty();
        }

        if(find.length >= 2){
            $('.clientsearch ul').empty();
            $.ajax({
                type: "GET",
                url: "/panel/search",
                data: {"find": find},
                cache: false,
                success: function(response){
                    if(response.length == 0){
                        $('.clientsearch ul').append("<li>"+"По вашему запросу ничего не найдено"+"</li>");
                        return 0;
                    }
                    $.each(response,function (index, value) {
                        $('.clientsearch ul').append("<a href=''><li>"+value.lastname+" "+value.name+" "+value.middlename+"</li></a>");
                    });
                }
            });
        }
    });
  • Вопрос задан
  • 388 просмотров
Решения вопроса 1
rockon404
@rockon404
Frontend Developer
Используйте lodash throttle:
$('#search').on('input', _.throttle(function(e) {
    var searchKeyword = $(this).val();
    ...
}, 1000));
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
Exploding
@Exploding
wtf?
Я сначала не правильно понял суть вопроса...
Вот ваше решение. Просто нужно отменять ожидание результатов для существующих запросов. Типа того как в браузере при не полной загрузке страницы, нажимаем на cancel.
И зачем нагружать клиент разбором результата, если можно отдавать полностью готовый html!
Короче вот:
$('input[name=clientsearch]').on('input',function(e){

	var query = $(this).val();
	var TXhr;
	
	if(query.length >= 2){
		
		$('.clientsearch ul').html("<li>Ищу...</li>");
		try{
			TXhr.abort();
		} 
		finally{
			 TXhr = $.ajax({
				type: "GET",
				url: "/panel/search",
				data: {"find": query},
				cache: false,
				success: function(response){
					$('.clientsearch ul').html(response);
				}
			});	
		}
	}
});
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы
07 мая 2024, в 14:11
4000 руб./за проект
07 мая 2024, в 14:10
10000 руб./за проект
07 мая 2024, в 14:04
1300 руб./за проект