Javascript-форум (https://javascript.ru/forum/)
-   Элементы интерфейса (https://javascript.ru/forum/dom-window/)
-   -   .keyup() задержка и отправка одного запроса после нескольких нажатий (https://javascript.ru/forum/dom-window/39385-keyup-zaderzhka-i-otpravka-odnogo-zaprosa-posle-neskolkikh-nazhatijj.html)

userball 27.06.2013 18:40

.keyup() задержка и отправка одного запроса после нескольких нажатий
 
Суть в том, что бы не отправлять запросы по каждому нажатию клавиши, а установить timeout и отправить запрос.

То есть, пользователь вводит несколько символов, скажем "я хочу что-то искать" и запрос отправляется через 1 секунду после того, как пользователь перестал вводить символы, при этом не произошло потери фокуса или других событий.

Как сделать timeout таким образом, что бы пропустить несколько событий и выполнить только последнее?

setTimeout(function() {
		// код ajax запроса
    }, 9000);


Но приводит к тому, что запросы откладываются и выполняются после подряд.

Есть какие-нибудь идеи?

рони 27.06.2013 18:48

Цитата:

Сообщение от userball
Есть какие-нибудь идеи?

поиск по форуму

по keyup() и обычно длине строки меньше 2 обнулять setTimeout и сразу устанавливать

Deff 27.06.2013 19:00

var busy=false;

function callAjax (Параметры) { if(!busy){busy=true;
  // код ajax запроса
 // в Callback устанавливаем:
  busy=false; return;
     } //End Callback 

}}

рони 27.06.2013 19:06

Deff,
а где keyup() в вашем коде?

Deff 27.06.2013 19:07

рони,
Эт в его коде keyup() по которому он переходит на callAjax

userball 27.06.2013 19:16

Цитата:

Сообщение от рони (Сообщение 258840)
поиск по форуму

по keyup() и обычно длине строки меньше 2 обнулять setTimeout и сразу устанавливать

не понял, это получается так, что ли?

setTimeout(function() {
        // код ajax запроса
	Window.clearTimeout;
	setTimeout({},1000);
    }, 9000);


Будте добры, подробнее - результат тот же.

Поиском ничего путного не нашел.

userball 27.06.2013 19:19

Цитата:

Сообщение от рони (Сообщение 258842)
Deff,
а где keyup() в вашем коде?

$('#some_id').keyup(function() {
    setTimeout(function() { 
        // тут ajax запрос
    }, 1000);
	});

рони 27.06.2013 19:32

userball,
var timer;
   $('#some_id').keyup(function () {
       window.clearTimeout(timer);
       if ($('#some_id').val().length > 2) {
           timer = setTimeout(function () {
               // тут ajax запрос
           }, 1000);
       }
   });

Deff 27.06.2013 19:43

рони,
Не наю - я так понял, что необходимо закрыть аякс запросы после первого нажатия, до прихода ответа...
А пост 8, -сколько кнопок раз нажал = столько и запрос повториться, а смысла в сбросе ответов сервера - мало

рони 27.06.2013 19:47

Deff,
алгоритм такой - пока идёт набор текста -- сервер незапрашивать
а ответ с сервера success выводить только если он совпадает со строкой набора.
блокировать аякс запросы до прихода ответа ненужно в данном случае .


Часовой пояс GMT +3, время: 22:06.