form表单重复提交——待修改
2010-11-17 18:51
281 查看
在开发中,如果一个新增或修改的表单,在后台完成数据库操作后我们设定的不是跳转到其他页面,还是返回本页面,这时点击浏览器的后退再提交或刷新页面,会导致form表单重复提交,即这条记录会被增加或修改两次。
导致表单重复提交的原因是:第一次提交的表单会被缓存到内存中,直到页面下次提交或页面关闭或转向其他页面时才消失。在自调用返回时,内存中的数据依然在,这时页面中的判断提交的代码依然可以检测到提交的值,顾会产生重复提交的效果。
总结网上的解决办法和自己的测试,可以用以下几个办法解决:
(1)最简单:页面提交后转到另一个页面而不是本页面
(2)提交表单后提交按钮变灰/隐藏提交按钮
(3)在js里设置全局变量,提交后修改该变量的值,依据变量的值判断是否重复提交
var flag=false;
function checkForm(){
if (flag==true){
return false;
}
flag=true;
document.form1.submit();
}
(4)在登录用户的Session中,放置一个随机数作为同步标记,并在初始化新增或编辑页面时就返回到前台页面中,用隐藏域赋值,当form被提交时,form中的同步标记就和Session中的同步标记作对比。在form首次提交的时候,这两个标记应该是一样的。如果标记不一样,那么该form就会禁止提交,一个错误就会返回给用户。在用户提交一个form时,如果按下浏览器中的后退按钮并尝试重新提交同一个form时,标记就会出现不匹配的现象。
另一方面,如果两个标记值匹配,那么我们就可以确信整个流程是正确的。在这种情况下,Session中的标记值就会被修改为一个新的值,同时允许提交该form。
还可以使用这个策略来控制对某些页面的直接访问,就好象上面资源保护中描述的一样。例如,假设一个用户将某个应用的页面A收藏到收藏夹中,而页面A 只允许通过页面B和C访问。当用户直接通过收藏夹来访问页面A,这时页面的访问顺序就是不正确的,这样同步标记将处在一个不同步的状态,或者它根本就不存在。不论怎样,访问都被禁止了。
导致表单重复提交的原因是:第一次提交的表单会被缓存到内存中,直到页面下次提交或页面关闭或转向其他页面时才消失。在自调用返回时,内存中的数据依然在,这时页面中的判断提交的代码依然可以检测到提交的值,顾会产生重复提交的效果。
总结网上的解决办法和自己的测试,可以用以下几个办法解决:
(1)最简单:页面提交后转到另一个页面而不是本页面
(2)提交表单后提交按钮变灰/隐藏提交按钮
(3)在js里设置全局变量,提交后修改该变量的值,依据变量的值判断是否重复提交
var flag=false;
function checkForm(){
if (flag==true){
return false;
}
flag=true;
document.form1.submit();
}
(4)在登录用户的Session中,放置一个随机数作为同步标记,并在初始化新增或编辑页面时就返回到前台页面中,用隐藏域赋值,当form被提交时,form中的同步标记就和Session中的同步标记作对比。在form首次提交的时候,这两个标记应该是一样的。如果标记不一样,那么该form就会禁止提交,一个错误就会返回给用户。在用户提交一个form时,如果按下浏览器中的后退按钮并尝试重新提交同一个form时,标记就会出现不匹配的现象。
另一方面,如果两个标记值匹配,那么我们就可以确信整个流程是正确的。在这种情况下,Session中的标记值就会被修改为一个新的值,同时允许提交该form。
还可以使用这个策略来控制对某些页面的直接访问,就好象上面资源保护中描述的一样。例如,假设一个用户将某个应用的页面A收藏到收藏夹中,而页面A 只允许通过页面B和C访问。当用户直接通过收藏夹来访问页面A,这时页面的访问顺序就是不正确的,这样同步标记将处在一个不同步的状态,或者它根本就不存在。不论怎样,访问都被禁止了。
相关文章推荐
- JSP入门之避免Form表单重复提交的解决方法
- js 提交form表单时,action的动态修改方法
- php 解决和避免form表单重复提交的方法
- js修改form表单的action属性,commit提交后,再更改action属性。发现表单没有提交
- jquery提交form表单时禁止重复提交的方法
- liferay防止form表单重复提交
- 用JavaScript防止重复提交表单form的两种方法
- js阻止form表单重复提交
- 大表格,多Form元素的提交 判断表单数据是否有被修改过
- form表单重复提交
- django form 表单重复提交的解决方案
- ajax方式和修改form属性action(提交路径)方式提交form表单
- form表单重复提交,button问题
- struts-spring-hibernate 框架 action 请求 ,form 表单提交 id 重复问题
- jQuery修改form的action值并提交表单的方法
- JSP入门之避免Form表单重复提交的几种方案
- php 解决和避免form表单重复提交的方法
- 解决form表单重复提交以及多页面提交问题
- springmvc防止form表单重复提交
- php解决和避免form表单重复提交的几种方法