如何防止表單的重復提交...
問題分析:
1、你怎么知道提交的表單是重復的?
2、確認了表單是重復的,如何去防止被提交...
問題解答:
1、個人認為:對同一個表單做了相同的重復操作...就認為是重復表單...也即每次提交表單的內容是相同的就認為是重復的...
2、解決辦法:
js解決:
(1)對按鈕進行控制
var $button = document.getElementById("btn");//獲取button對象 $button.attr("disabled","disabled"); window.setTimeout(function(){ $button.removeAttr("disabled");},1000);
當然這么操作的前提是,你在disbaled后,要對表單進行處理,比如清空操作...
(2)做狀態位進行標識...
<script language="javascript"> var checkSubmitFlg = false; function checkSubmit() { if (!checkSubmitFlg) { checkSubmitFlg = true; return true; } else{ alert("不能重復提交"); return false; } } </script>
<form action="XXXX" method="POST" onsubmit="return checkSubmit()">
內容:<input type="text" name="content" value=""/><br>
<input type="submit" value="提交"><br>
</form>
疑問:做這種標識,如何判斷你是換了另一個表單...
(3)加驗證碼,在每次提交時進行驗證...防止重復提交..
后台程序解決:
大概主要用到一個token機制..
可以參考struts2的token機制,還有Token Session(令牌機制)
在每次表單提交時,action會調用isValidToken()方法,進行判斷是否相同的token,如果相同,
進行提交,如果不同,認為是重復提交..
當然這種前提是:
在你打開新增表單的時候,會調用action,生成token碼..然后在你的表單和session中各保存一份,
當提交調用action時,會進行token檢查,並且在action處理完后,會重置session 中的token,此時你再提交,
就會導致token不一致,沒法提交...當然...意思就是要重新調用action生成新的token,和session保持一致...