Задать вопрос
crazy_str
@crazy_str
web-программист

Timeout ajax запроса?

Имеется функция которая выполняет ajax запрос по нажатию на кнопку.
function LoadQuest()
{
	$.ajax({
		type: "POST",
		url: "/ajax/",
		data: {
			's_id': s_id,
			'member_id': member_id,
			'param': 'LoadQuest'
		},
		error: function()
		{
			document.getElementById('load_button').innerHTML = '<button type="button" tkey="loadmore_button">'+load_more+'</button>';
			console.log(3);
		},
		beforeSend: function()
		{
			document.getElementById('load_button').innerHTML = '<button type="button" onClick="LoadQuest()">\
																	<div class="sk-spinner sk-spinner-wave">\
																		<div class="sk-rect1"></div>\
																		<div class="sk-rect2"></div>\
																		<div class="sk-rect3"></div>\
																		<div class="sk-rect4"></div>\
																		<div class="sk-rect5"></div>\
																	</div>\
																</button>';
		},
		success: function(msg)
		{
			console.log(0);
			msg = jQuery.parseJSON(msg);
			if(msg['error'] == true)
			{
				document.getElementById('load_button').innerHTML = '<button type="button" tkey="error_14">'+msg['text']+'</button>';
				console.log(1);
			}
			else
			{
				for(var i = 0; i < count(msg); i++)
				{
					console.log(2);
					message += '<div class="footer">\
									<div class="title">'+msg[i]['q_title']+'</div>\
									<div class="quest-content">'+msg[i]['q_text']+'</div>\
								</div>\
								<div class="clearfix"></div>';
					sid = msg[i]['q_id'];
				}
				s_id = sid;
				document.getElementById("quest").innerHTML = message;
				document.getElementById('load_button').innerHTML = '<button type="button" onClick="LoadQuest()" tkey="loadmore_button">'+load_more+'</button>';
			}
		}
	});
}

Как предотвратить флуд нажатия на кнопку? т.к в базу отправляются запросы. Пробовал timeout не получается или я не то делаю или код работать не хочет.
  • Вопрос задан
  • 1792 просмотра
Подписаться 1 Оценить Комментировать
Решения вопроса 1
DevMan
@DevMan
уберите на время запроса click-хэндлер у кнопки.
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
@mr-molodoy
Можно кучей способов.

  1. Убрать обработчик с события click
    var $button = $("button#send-ajax");
    function clickHandler () {
        // Отправка Ajax
        // ...
    
        // Отключаем обработку события клика
        $button.off('click'); 
    
        // Включаем через 3 секунды
        setTimeOut(function () { $button.on('click', clickHandler); }, 3000);
    }
    
    // Включаем обработчик события
    $button.on('click', clickHandler)


  2. При нажатии проверяем переменную времени последнего клика, если времени прошло более 3-5 сек. выполняем запрос и обновляем время в переменной.
  3. По аналогии с первым примером, только спрятать кнопку на время вместо удаления обработчика
Ответ написан
Комментировать
Ваш ответ на вопрос

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

Похожие вопросы
Rocket Смоленск
от 80 000 до 130 000 ₽
div. Ставрополь
от 40 000 до 90 000 ₽
Wanted. Санкт-Петербург
До 220 000 ₽