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 не получается или я не то делаю или код работать не хочет.
  • Вопрос задан
  • 1762 просмотра
Решения вопроса 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. По аналогии с первым примером, только спрятать кнопку на время вместо удаления обработчика
Ответ написан
Комментировать
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы