一、表单重复提交的常见应用场景 网络延迟的情况下用户多次点击submit按钮导致表单重复提交 用户提交表单后,点击【刷新】按钮导致表单重复提交(点击浏览器的刷新按钮,就是把浏览器上次做的事情再做一次,因为这样也会导致表单重复提交...) 用户提交表单后,点击浏览器的【后退】按钮回退到表单页面后进行再次提交 二、防止防止表单重复提交的方式 1、利用JavaScript防止表单重复提交 (1)、用JavaScript控制Form表单只能提交一次...(4)、ajax提交加锁 采用ajax方式提交表单时,设置一个布尔变量(true/false),当然其他类型变量也可以。...(5)、提交后重定向到一个提交成功的页面 表单提交后跳转到另外一个成功页面。这样可以避免用户按F5导致的重复提交,浏览器也不会出现表单重复提交的警告,以及消除按浏览器前进和后退按导致的同样问题。...如果表单重复提交,那么数据库插入重复记录时,唯一约束能有效避免重复入库。
1.HTTP是如何提交表单的 标签的属性enctype设置以何种编码方式提交表单数据。...它只处理表单域里的value属性值,采用这种变法方式的表单会将表单域的值处理成URL方式。...multipart/form-data: 这种编码方式会以二进制流的方式来处理表单数据,这中编码方式会把文件域指定的文件内容也封装到请求参数里。...text/plain: 这种方式当表单的action属性值为mailto:URL的形式时比较方便,这种方式主要适用于直接通过表单发送邮件。...正如前面所说的,表单在提交表单时,如果采用默认编码方式,文件的内容是不会被提交的。要提交文件内容要采用multipart/form-data编码方式,这需要在服务器端从提交的二进制流中读取文件内容。
var nowTime = new Date().getTime(); // 当前时间 var clickTime = $(this).attr("ctime"); //获取节点属性名的值...稍后再试'); return false; }else{ $(this).attr("ctime",nowTime);//设置节点属性的值...alert('提交成功'); } }); }); //小于5S则提示操作频繁
防止表单重复提交: var flag = false; function jqButtonBC_onClickClient_insert(rc) { if (flag==false) { flag...).close(); } else { Artery.showError("保存失败"); } }); } else { return; } } 参考博客: 写的真的很好
4、阻止表单提交 只要在表单中存在上面列出的任何一种按钮,那么相应表单控件拥有焦点的情况下,按回车键就可以提交表单。如果表单里没有提交按钮,按回车键不会提交表单。...以这种方式提交表单时,浏览器会在将请求发送给服务器之前触发submit事件。这样,我们就有机会验证表单数据,并据以决定是否允许表单提交。阻止这个事件的默认行为就可以取消表单提交。...一般来说,在表单数据无效而不能发送给服务器时,可以使用这一技术。 5、在JavaScript中,以编程方式调用submit()方法也可以提交表单。...这种方式无需表单包含提交按钮,任何时候都可以正常提交表单。...提交表单时可能出现的最大问题,就是重复提交表单。在第一次提交表单后,如果长时间没有反映,用户可能会变得不耐烦。这时候,他们也许会反复单击提交按钮。
问题引入:当我们在做一个页面数据提交的时候,当我们连续点击提交按钮,因为快速连续点击,因为速度过快,页面还来不及反应,导致页面从复提交。。...“hasSubmit”验证,如果hasSubmit==false才提交表单,在提交表单的同时修改hasSubmit=true,ajax提交完成时,在次修改hasSubmit=false即可完成。...div> var hasSubmit = false; //记录用户是否已经提交了表单...div> var hasSubmit = false; //记录用户是否已经提交了表单...$(function () { //表单验证JS $("#form1").validate({ //出错时添加的标签
问题 在看Java Web 深入分析时, 看到表单重复提交问题一节, 如下描述如何解决问题: 要防止表单重复提交, 就要标识用户的每一次访问请求, 使得每一次访问对服务端来说都是唯一的....为了标识用户的每次访问请求, 可以在用户请求一个表单域时,增加一个隐藏的表单项, 这个表单项的值每一次都是唯一的token....如果一致, 则说明没有重复提交, 否则用户提交上来的token已经不是当前这个请求的合法token. 流程图如下: ?...我提交的第二次, 第三次还是带有相同的token啊, 服务器检测Session中的内容应该还是一致的. 为什么可以防止重复提交?...所以服务器端的检测还是必不可少的, 但是可以大幅度减少用户无意识的多次提交表单, 从而减轻服务器压力.
大家好,又见面了,我是你们的朋友全栈君。...最近工作比较忙,着急上线,写个简单的东西吧 url为你要提交的地址 params 为你提交的参数 function fromPost(URL, PARAMS) {
利用Spring MVC的过滤器及token传递验证来实现表单防重复提交。...create() default false; boolean remove() default false; } 在跳转页面的方法上加上:@Token(create = true)\ 在提交的...(remove) { if (isRepeatSubmit(request)) { logger.warn("表单不能重复提交...class="com.example.web.interceptor.TokenInterceptor"/> 表单添加...{session.getAttribute('token')}"/> 在form表单里面添加token域,提交表单时需要传过去。
> 四、JSP 五、Controller 1、请求表单时
防止重复提交 对于防止重复提交,最简单也最不安全的做法相信大家也都经历过,前端在一个请求发送后立即禁用掉按钮,这里咱们来讨论一下后端对防止重复提交的处理方式。...主要针对非分布式环境下防止重复提交与分布式环境下的防止重复提交。一般分布式环境下也可以通过网关路由的方式将同一个用户的请求路由到一个实例上处理。...单进程内的防止重复提交 单个进程内防止重复提交可以选取的方式有很多种,因为并不是每一个接口都需要做防止重复提交的校验,所以在java中通常采用注解+拦截器的方式来实现。...= null) { sessionIdMap.remove(key, key); } } 进程内防止重复提交的特点很明显,就是构建一个锁池,每个需要防止重复提交的请求需要来池中获取锁...分布式环境下防止重复提交 和单进程的实现方式类似,只是这个锁池是分布式的,多个进程来这里申请锁,然后资源利用完之后会释放锁。没错,这就是传说中的分布式锁。其他的操作与单进程内的处理方式一样。
前言 在实际开发过程中,web应用经常会出现网络延迟,接口处理时间略长,用户习惯等原因造成的客户连续多次点击提交按钮调用接口,导致数据库会出现重复数据或这接口业务逻辑bug等问题 方案 利用redis...锁实同一个用户同一个请求2秒内重复提交返回错误路由 SubmitLock 标记需要拦截的方法 @Target({ElementType.METHOD}) @Retention(RetentionPolicy.RUNTIME...System.out.println("tryLock fail, key = ["+key+"]"); return Result.errorResult().setMsg("重复请求
Form表单提交方式探究 在进行项目编程的时候,我们难免会去编写一些简单的前端页面. 而编写前端页面就力不开 form表单的支持....下面就form表单的提交方式进行如下探寻 1、常规写法 在form表单中添加一个 input标签,类型为submit 商品列表 的进行dom操作进行提交 新建一个button ,增加id属性 ,当点击这个button时,触发表单提交操作 前端代码: 表单太智能化了,只需要在表单中添加一个button 按钮, 点击他就会自动帮你提交表单 ! 亲测有效! QQ浏览器\谷歌浏览器都可以....3、利用ajax 还是利用button ,在点击相关按钮是, 将相关的信息(一条甚至是多条,json格式) 通过ajax的方式发送到servlet 或者spring容器 ,然后还可以获得从前端那里或得到的数据
大家好,又见面了,我是你们的朋友全栈君。 表单提交方式一:直接利用form表单提交 html页面代码: <!...》》 表单提交方式三:使用easyui的form插件提交 html页面代码:(需要引入Jquery 与 easyui的js文件) <!...》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》 表单提交方式四:form表单提交文件/图片 需要设定form的enctype=“multipart/form-data”...novalidate 作用:如果使用该属性,则提交表单时不进行验证。 使用方式 : novalidate="novalidate" target 作用:规定在何处打开 action URL。...-- type=image和type=submit的异同: 都可以相应回车,并且都能提交。 区别就是type=image的input提交方式会把按钮点击的位置坐标x,y提交过去。
1.1 submit直接提交 账号 密码 提交..."> 上面代码就可以直接完成form表单的提交,提交地址为test.php。...但大部分时候我们都需要对提交的内容进行校验。这时候就需要用到了onsubmit了。...1.2 带校验的submit提交 <label for="logInName
比如当他点击提交表单时,服务器处理比较慢, 页面上没有任何反应,他会迫不及待地再点击几次,这样就会产生重复数据或者报错,或者他会刷新一下再次提交。...关于js代码限制,就是当用户第一次提交后,将提交按钮设置为“disable”状态,或者直接不提交重复请求,这只能处理用户重复连续点击的情况,如果用户刷新页面后再次提交,这种方法就无济于事了,因此我们更多的是通过...session处理,就是在访问表单提交页时,服务器端生成一个随机序列,存储在session中,并传递到客户端,用户提交时,连同这个序列一起传递到服务器,后端程序会判断这两个序列是否一致,如果一致,表明是第一次提交...,否则就是重复提交。...这是借助redis缓存实现的类加锁机制,解决多服务器多用户场景下请求重复提交的情况。
在Web开发中,对于处理表单重复提交是经常要面对的事情。那么,存在哪些场景会导致表单重复提交呢?表单重复提交会带来什么问题?有哪些方法可以避免表单重复提交? ?...2.场景二:提交表单成功之后用户再次点击刷新按钮导致表单重复提交 ? 3.场景三:提交表单成功之后点击后退按钮回退到表单页面再次提交 ? 表单重复提交的弊端 下面通过一个简单的示例进行说明。...显然,从演示结果来看,如果出现表单重复提交,将会导致相同的数据被重复插入到数据库中。实际上,这是不应该发生的。 如何避免重复提交表单 关于解决表单重复提交,分为在前端拦截和服务端拦截2种方式。...在前端拦截虽然可以解决场景一的表单重复提交问题,但是针对场景二(刷新)和场景三(后退重新提交)的表单重复提交是无能为力的。 ?...显然,通过在服务端保存token的方式拦截场景二和场景三的表单重复提交是非常有效的。而且,这种方式同样可以拦截场景一的表单重复提交。 ?
Form表单提交数据的几种方式 一、submit提交 在form标签中添加Action(提交的地址)和method(post),且有一个submit按钮()就可以进行数据的提交...这种默认的提交方式,一般会进行页面的跳转(不成功时跳转到当前页面)。而有时候我们是对弹出框进行数据提交的,希望提交成功则关闭弹出框并刷选父页面,失败则提示失败原因,且弹出框不关闭。...二、Ajax提交form表单 $(‘#documentForm’).submitForm({ url: “/Document/SubmitDocumentCreate”,...$(‘#ff’).form(‘submit’, { url:…, onSubmit: function(){ //进行表单验证 //如果返回false阻止提交 }, success:function...(data){ alert(data) } }); 四、form表单提交附件 需要设定form的enctype=”multipart/form-data”并且添加<input type=’file
表单重复提交是在多用户Web应用中最常见、带来很多麻烦的一个问题。有很多的应用场景都会遇到重复提交问题,比如: 点击提交按钮两次。 点击刷新按钮。...使用浏览器后退按钮重复之前的操作,导致重复提交表单。 使用浏览器历史记录重复提交表单。 浏览器重复的HTTP请求。 几种防止表单重复提交的方法 1.禁掉提交按钮。...这能避免用户按F5导致的重复提交,而其也不会出现浏览器表单重复提交的警告,也能消除按浏览器前进和后退按导致的同样问题。 3.在session中存放一个特殊标志。...如果发现表单提交里没有有效的标志串,这说明表单已经被提交过了,忽略这次提交。 这使你的web应用有了更高级的XSRF保护。 4.在数据库里添加约束。...在数据库里添加唯一约束或创建唯一索引,防止出现重复数据。这是最有效的防止重复提交数据的方法。
" name="name"> pwd: 提交..." onclick="document.forms[0].submit()"> 提交" onclick="this.form.submit..." value="4提交" onclick="document.getElementById('formId').submit()"> 提交"> 提交" onclick="doSubmit()"> function doSubmit(){ //表单提交 document.forms.submit(); } <
领取专属 10元无门槛券
手把手带您无忧上云