2009-05-08 5 views
0

Что такое хороший способ блокировки до завершения предыдущего события ajax?Предотвращение дублирования событий ajax в jquery

Я следовал How can you make a vote-up-down button like in Stackoverflow?, но если я нажму кнопку достаточно быстро, он отправит на сервер несколько (и, возможно, непоследовательных) событий. Как это сделать, чтобы пользователь мог ждать, пока другой клик не будет зарегистрирован?

Редактировать: Я также не хочу, чтобы он блокировал глобально - только для этой кнопки/элемента. Должен ли я поддерживать хэш?

ответ

5

Ну, так как я написал, что я думаю, я мог бы также ответить на этот вопрос тоже;)

«общего «способ сделать это заключается в наличии переменной индикатора, в которой выполняется запрос, и обновлять его соответственно до/после того, как все произойдет. Для моего кода в этом вопросе, вы бы изменить его следующим образом:

Вне функции мыши, добавьте это:

var voting = false; // not initially voting 

Внутри функции мыши, на самом верху, добавьте это:

if(voting) return false; // if voting, return 
voting = true; // if not, set voting to true 

Внутри обоих почтовых обратных вызовов, добавьте это:

voting = false; // done voting, set back to false 

Если вы хотите сохранить госпитализацию dicator на за вопрос/ответ/пункт основе, вы можете сделать это:

Во-первых, заменить этот код:

var id = $(this).parents('div.answer').attr('id').split('_')[1]; 

С этим:

var parent = $(this).parents('div.answer'); // get the parent div 
if(parent.data('voting')) return false; // if voting, return 
parent.data('voting', true); // if not, update the marker 
var id = parent.attr('id').split('_')[1]; // get the id 

Тогда в обоих почтовых обратных вызовов, добавить следующее:

parent.data('voting', false); // done voting, set back to false 

в этом случае мы будем использовать JQuery-х data для хранения голосования s tatus конкретного вопроса/ответа/элемента внутри содержащего DIV и, соответственно, обновляя его каждый раз, когда что-то происходит.

Надеюсь, это поможет.

0

использовать начальные и конечные события AJAX для установки глобальной переменной var, которая будет занята до тех пор, пока запрос не будет завершен. Покажите сообщение о том, что действие выполняется, чтобы также сообщить об этом пользователю.

Jquery имеет нагрузку функций, чтобы помочь, если это устраивает ваше приложение:

http://docs.jquery.com/Ajax

+0

Я также не хочу, чтобы заблокировать глобально - только для этой кнопки. Мне нужно сохранить хэш? – Timmy

+0

глобальных варсов - не очень хорошо. – redsquare

4

Bind событие один раз jQuery.fn.one затем связать его снова в функции обратного вызова

myFunc = function() { 
    $.post(url, data, function(data){ 
     $('#button').one('click', myFunc) 
    } 
}; 

$('#button').one('click', myFunc); 
Смежные вопросы