如何防止表单的重复提交...
问题分析:
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保持一致...