Показать сообщение отдельно
  #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, ее приходится выносить в глобальную область. Есть какой-то вариант, чтобы он хранился в функции как статическая переменная,
или есть способ еще проще без Таймаута?
Ответить с цитированием