Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 22.10.2014, 17:58
Кандидат Javascript-наук
Отправить личное сообщение для vuler Посмотреть профиль Найти все сообщения от vuler
 
Регистрация: 16.02.2012
Сообщений: 109

Как правильно организовать задержку и обнуление Ajax запроса.
Всем добрый день.
Есть каталог, который в по ajax подтягивает данные из БД. Нужно реализовать задержку, чтобы пользователь не мог отсылать более одного запроса
в 3 секунды и если за 3 секунды произошел еще один запрос к БД, то старый запрос обнулялся.
Вот Код:
var ajax_timer;

function pl_perehod_data(){
href=$(this).attr('href');
page_num=$(this).closest('.page_lister').find('input').val();
	clearTimeout(ajax_timer);
	ajax_timer=setTimeout(function(element){
		$.ajax({ type: 'POST',dataType: 'json', url:"../php_scripts/catalogs_tools.php",
			 data:({href:href,page_num:page_num, task:"take_page_data_perehod"}),context: element,
			success: function(data){
					block=$(this).closest('.page_lister').parent();
					block.find('.page_lister').replaceWith($(data.lister_body));
					block.find('.catalog').replaceWith($(data.catalog_body));	
			}})
	},3000,$(this))
}



$(document).ready(function() {

$('body').on('click','.personal_card .opener',cat_open_close_card);
$('body').on('click','.page_lister a',pl_get_link_data);
$('body').on('click','.page_lister .js_perehod',pl_perehod_data);

})

Вопрос по Метке ajax_timer, ее приходится выносить в глобальную область. Есть какой-то вариант, чтобы он хранился в функции как статическая переменная,
или есть способ еще проще без Таймаута?
Ответить с цитированием
  #2 (permalink)  
Старый 22.10.2014, 18:02
Профессор
Отправить личное сообщение для kostyanet Посмотреть профиль Найти все сообщения от kostyanet
 
Регистрация: 23.10.2010
Сообщений: 2,718

А вы меняйте курсор с normal на wait во время ожидания и нормальный юзер таким курсором никогда не сможет воспользоваться, то есть ткнуть куда-то. Затем меняйте wait на normal. А ненормальных в зад.
Ответить с цитированием
  #3 (permalink)  
Старый 22.10.2014, 18:06
Профессор
Отправить личное сообщение для kostyanet Посмотреть профиль Найти все сообщения от kostyanet
 
Регистрация: 23.10.2010
Сообщений: 2,718

Сообщение от vuler
Есть каталог, который в по ajax подтягивает данные из БД
Пользуясь случаем хотел бы узнать у знатока, поскольку задумывался поменять паги на подтяги. Как в подтягивании индексируется что не подтянуто? РОботы теперь научились прокручивать эээ страницы?
Ответить с цитированием
  #4 (permalink)  
Старый 22.10.2014, 18:42
Аватар для danik.js
Профессор
Отправить личное сообщение для danik.js Посмотреть профиль Найти все сообщения от danik.js
 
Регистрация: 11.09.2010
Сообщений: 8,804

Сообщение от vuler
href=$(this).attr('href');
Это ни о чем не говорит?

Кстати, нафиг усложнять? Почему не this.href?
__________________
В личку только с интересными предложениями
Ответить с цитированием
  #5 (permalink)  
Старый 22.10.2014, 18:44
Аватар для danik.js
Профессор
Отправить личное сообщение для danik.js Посмотреть профиль Найти все сообщения от danik.js
 
Регистрация: 11.09.2010
Сообщений: 8,804

Сообщение от vuler
и если за 3 секунды произошел еще один запрос к БД, то старый запрос обнулялся.
А как он произойдет, если
Сообщение от vuler
пользователь не мог отсылать более одного запроса
в 3 секунды
?
__________________
В личку только с интересными предложениями
Ответить с цитированием
  #6 (permalink)  
Старый 22.10.2014, 18:53
Аватар для danik.js
Профессор
Отправить личное сообщение для danik.js Посмотреть профиль Найти все сообщения от danik.js
 
Регистрация: 11.09.2010
Сообщений: 8,804

Я не понял. У тя ща перед запросом задержка 3с. Тебя это устраивает или нет?

Запоминай время последнего запроса, а также чекай readyState последнего запроса. Вместо readyState можешь просто по success'у выставлять флаг.

момент запроса
заняты = нет

запрос затупил = (момент запроса - сейчас) > 3 сек
если (не заняты или запрос затупил)
    если запрос затупил  то делаем аборт
    делаем запрос, заняты = да, момент запроса = сейчас (по саксессу заняты = нет)


Вместо заняты можно просто обнулять момент запроса, что будет означать что запрос уже завершен, то есть не заняты.
__________________
В личку только с интересными предложениями

Последний раз редактировалось danik.js, 22.10.2014 в 18:55.
Ответить с цитированием
  #7 (permalink)  
Старый 22.10.2014, 18:56
Аватар для danik.js
Профессор
Отправить личное сообщение для danik.js Посмотреть профиль Найти все сообщения от danik.js
 
Регистрация: 11.09.2010
Сообщений: 8,804

Сообщение от danik.js
Это ни о чем не говорит?
Это было обращено kostyanet, если че.
__________________
В личку только с интересными предложениями
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
как сделать loader во время ajax запроса? FRIE jQuery 17 08.10.2014 09:42
Как сделать подрузку <div> через ajax? Feniks000 jQuery 1 11.02.2014 09:44
Как вы относитесь к наркоманам? Maxmaxmaximus7 Оффтопик 7 05.02.2014 13:29
Как приостановить выполнение скрипта до получения результата AJAX запроса? Хиросим AJAX и COMET 9 31.10.2011 10:56
Как правильно послать XML в POST запросе LowCoder AJAX и COMET 10 15.07.2009 23:20