禁止表单重复提交------客户端方案(Java Script)
使用js来实现禁止表单重复提交的方法很多,大体有如下几种:
1、提交时,使提交按钮不可用(disable)
function disableBtns()
{
for(k=0;k<document.forms.length;k++ )
{
//获取当前表单
var frm = document.forms[k]
for(i=0;i<frm.length;i++)
{
var obj = frm.elements[i]
if ( obj.type=='button' || obj.type=='submit' || obj.type=='reset' )
{
obj.disabled = true
if (obj.type=='submit')
{
var oNewNode = document.createElement_x("input");
oNewNode.type = "hidden"
oNewNode.name = obj.name
oNewNode.value = obj.value
//frm.insertAdjacentElement("beforeEnd",oNewNode);
obj.insertAdjacentElement("afterEnd",oNewNode);
}
}
}
}
}
2、或者隐藏按钮,使用进度条
function hideForm(form)
{
//waitStr 提交过程中出现的提示,可以自行设置
var waiting = "<center><img src='progress.jpg'>数据正在提交中,请等候</center>";
form.innerHTML = "<div style='display:none;'>"+form.innerHTML+"</div>"+waiting;
}
3、使用标识来实现控制客户端多次点击
<script type="text/javascript">
//控制标志
var submitted = false;
function checkSubmit() {
if(submitted == true) {
alert("submitted == true");
return false;
}
submitted = true;
return true;
}
//控制页面双击行为
document.ondblclick = function docOnDblClick() {
window.event.returnValue = false;
}
//控制页面单击行为
document.onclick = function docOnClick() {
if(submitted) {
window.event.returnValue = false;
}
}
</script>
4、服务端禁止重复提交
if (isTokenValid(request)) { //判断token是否相同
// invoke business method
//......
// reset transaction token after transaction success!
this.resetToken(request);
return mapping.findForward("success");
} else {
System.out.println("duplicate token");
return mapping.findForward("error");
}