Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 27.06.2013, 18:40
Интересующийся
Отправить личное сообщение для userball Посмотреть профиль Найти все сообщения от userball
 
Регистрация: 14.06.2013
Сообщений: 10

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

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

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

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


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

Есть какие-нибудь идеи?
Ответить с цитированием
  #2 (permalink)  
Старый 27.06.2013, 18:48
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,109

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

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

Последний раз редактировалось рони, 27.06.2013 в 19:09.
Ответить с цитированием
  #3 (permalink)  
Старый 27.06.2013, 19:00
без статуса
Отправить личное сообщение для Deff Посмотреть профиль Найти все сообщения от Deff
 
Регистрация: 25.05.2012
Сообщений: 8,219

var busy=false;

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

}}

Последний раз редактировалось Deff, 27.06.2013 в 19:08.
Ответить с цитированием
  #4 (permalink)  
Старый 27.06.2013, 19:06
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,109

Deff,
а где keyup() в вашем коде?
Ответить с цитированием
  #5 (permalink)  
Старый 27.06.2013, 19:07
без статуса
Отправить личное сообщение для Deff Посмотреть профиль Найти все сообщения от Deff
 
Регистрация: 25.05.2012
Сообщений: 8,219

рони,
Эт в его коде keyup() по которому он переходит на callAjax
Ответить с цитированием
  #6 (permalink)  
Старый 27.06.2013, 19:16
Интересующийся
Отправить личное сообщение для userball Посмотреть профиль Найти все сообщения от userball
 
Регистрация: 14.06.2013
Сообщений: 10

Сообщение от рони Посмотреть сообщение
поиск по форуму

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

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


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

Поиском ничего путного не нашел.
Ответить с цитированием
  #7 (permalink)  
Старый 27.06.2013, 19:19
Интересующийся
Отправить личное сообщение для userball Посмотреть профиль Найти все сообщения от userball
 
Регистрация: 14.06.2013
Сообщений: 10

Сообщение от рони Посмотреть сообщение
Deff,
а где keyup() в вашем коде?
$('#some_id').keyup(function() {
    setTimeout(function() { 
        // тут ajax запрос
    }, 1000);
	});
Ответить с цитированием
  #8 (permalink)  
Старый 27.06.2013, 19:32
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,109

userball,
var timer;
   $('#some_id').keyup(function () {
       window.clearTimeout(timer);
       if ($('#some_id').val().length > 2) {
           timer = setTimeout(function () {
               // тут ajax запрос
           }, 1000);
       }
   });
Ответить с цитированием
  #9 (permalink)  
Старый 27.06.2013, 19:43
без статуса
Отправить личное сообщение для Deff Посмотреть профиль Найти все сообщения от Deff
 
Регистрация: 25.05.2012
Сообщений: 8,219

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

Последний раз редактировалось Deff, 27.06.2013 в 19:45.
Ответить с цитированием
  #10 (permalink)  
Старый 27.06.2013, 19:47
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,109

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

Последний раз редактировалось рони, 27.06.2013 в 19:52.
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Отправка запроса с одного на другой сайт makar3000 Общие вопросы Javascript 6 21.12.2011 23:50
Проблема с событиями после ajax запроса Mirgorod AJAX и COMET 5 12.06.2010 18:24
Сохранение результата ajax запроса после нажатия 'back' gregOlsen AJAX и COMET 5 18.11.2009 12:23