2009-05-08 16 views
0

以前のajaxイベントが完了するまでブロックする良い方法はありますか?jqueryでの重複するajaxイベントの防止

私は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 

をごとの質問/答え/品目ベースでディクテーター身元不明でニューヨーク、あなたがこれを行うことができます:

まず、このコードに置き換えます。これにより

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 

を、これを追加します。私たちは投票秒を保存するためにjQueryのdataを使用していると思います。この場合

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

DIVの中にある特定の質問/回答/項目の時間を測定し、何かが起こるたびにそれを更新する。

これが役に立ちます。

0

要求が完了するまで、開始および終了のAJAXイベントを使用してグローバル変数をビジー状態に設定します。アクションを実行中であることを示すメッセージを表示して、ユーザーにも通知します。

jQueryのそれはあなたのアプリケーションに合った場合は支援する機能の負荷を持っています

http://docs.jquery.com/Ajax

+0

それをバインドjQuery.fn.oneを使用してイベント - ちょうどそのボタンのために。私はハッシュを維持する必要がありますか? – Timmy

+0

グローバルなvars - 良くありません。 – redsquare

4

バインド一度、私はまた、それが世界的にブロックしたくないコールバック関数の中で再び

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

$('#button').one('click', myFunc); 
関連する問題