我正在使用按鈕通過Ajax提交數據。我使用jQuery來禁用和啓用按鈕。這是爲了防止「按鈕混搭」,用戶可以通過惡意或不知情的方式觸發多個請求。如何在使用錨點而不是按鈕時防止按鈕混搭?
有沒有一種「元素不可知」的方式來防止jQuery中的這種行爲?例如,假設我想使用錨而不是按鈕來提交數據。我可以禁用的按鈕;但據我所知,你不能停用錨。
下面是我現在做這個(注:我已經刪除了一些不必要的代碼,使之短)
$('.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;
});
HTML:
<input class="button" type="button" value="">
您應該考慮捕獲多個表單提交服務器端而不是客戶端。這更可靠。 – RoToRa 2010-12-10 15:29:56
*「這是爲了防止‘按鈕糖化’,用戶可以在其中火多個請求無論是惡意還是無意。」 *這是很好的嘗試,並防止人們在不知不覺中發送多個請求,但你不能阻止他們這樣做惡意。服務器必須堅固。 – 2010-12-10 15:39:04
謝謝你們,我沒有提到我已經有了一個後端機制來處理這個問題。我只是不希望服務器在這樣的事件中被不必要地轟炸。 – Mohamad 2010-12-10 17:30:06