:HTML
$('.fav .button').click(function() {
$.ajax({
context: this,
dataType: 'json',
beforeSend: function() {
// Toggle state; disable button to prevent button mashing
$(".fav").toggleClass("fav-state-1");
$(".fav .button").attr("disabled", true);
},
error: function() {
// Rollback state and re-enable button on error
$(".fav").toggleClass("fav-state-1");
$(".fav .button").attr("disabled", false);
},
success: function(response) {
if (response.result == "success") {
$(".fav .button").attr("disabled", false);
}
else {
// Rollback state; re-enable button
$(".fav").toggleClass("fav-state-1");
$(".fav .button").attr("disabled", false);
}
}
});
return false;
});
(私はそれを短くするために不要なコードの一部を削除しました注意してください):ここでは
は、私は今、これをやっている方法です次のようになります。
- セットアップ変数をクリックした後に最小秒数。
- 要求を起動するメソッドで、それが真であるかどうかを確認し、要求が送信されない場合は
- を要求し、変数をtrueに設定していない場合。変数をfalseに戻すsetTimeoutで1秒後に起動するメソッドを設定します。
必要に応じて変数名をカスタマイズする必要があります。変数を正しいスコープに保持する方法を見つける必要がありますが、それは難しくありません。
クライアント側ではなくサーバー側で複数のフォームを送信することを検討する必要があります。それはより信頼できます。 – RoToRa
* "これは、ユーザーが複数のリクエストを悪意のあるか無意識に発することができる"ボタンマッシング(button-mashing) "を防ぐためです。*無意識に複数のリクエストを送信しようとするのは良いことですが、悪意のある行為をやめることはできません。サーバーはそれに対して堅牢でなければなりません。 –
ありがとう、私はすでにこれを処理するバックエンドのメカニズムを持っていることに言及しませんでした。私はそのようなイベントでサーバが不必要に攻撃されることを望んでいませんでした。 – Mohamad