前言

form 表单提交的时候,当快速点击提交按钮的时候,会触发多个请求过去,会导致重复添加。

前端页面

前端form表单页面,2个输入框,一个提交按钮

<form id="form" action="" method="post" class="form-horizontal" role="form"><div class="form-group"><label for="project_name" class="col-xm-1 col-sm-2 col-md-1 control-label">项目名称:</label><div class="col-xs-10 col-sm-8 col-md-5" ><input type="text" class="form-control" id="project_name" name="project_name" placeholder="请输入项目名称"></div></div><div class="form-group"><label for="responsible_name" class="col-xm-1 col-sm-2 col-md-1 control-label">负责人员:</label><div class="col-xs-10 col-sm-8 col-md-5" ><input type="text" class="form-control" id="responsible_name" name="responsible_name" placeholder="请输入负责人"></div></div><div class="form-group"><div class="col-xs-10 col-sm-offset-2 col-sm-8 col-md-offset-1 col-md-5" ><input id="save" type="button" class="form-control btn btn-success" value="点击提交"></div></div>
</form>

这里用ajax提交请求

<script>
/**
定义表单提交事件
*/
function project_save(){var $form = $("#form"); // The form instance$.ajax({type:'post',url:'/page',data: $form.serialize(),dataType:'json',success: function(data){if(data.code == 0){console.log("提交成功");// 重定向到列表页location.href="/page/list_project/";}else{alert('添加失败')}},error: function (jqXHR, textStatus, e) {alert("提交异常:"+e);}});}//点提交按钮,发请求
$('#save').click(function(e) {project_save();})
</script>

遇到问题,当快速点提交按钮多次,会触发多个请求

beforeSend 禁用添加按钮

解决办法,在点提交按钮,发请求之前,可以调用beforeSend 方法,添加一个disabled属性,禁用按钮。这样用户就无法继续点击了。
收到返回结果的时候,再取消disabled属性

/**
定义表单提交事件
*/
function project_save(){var $form = $("#form"); // The form instance$.ajax({type:'post',url:'/page',data: $form.serialize(),dataType:'json',beforeSend: function() {// 设置disabled阻止用户继续点击$('#save').attr('disabled', 'disabled');},success: function(data){if(data.code == 0){console.log("提交成功");// 重定向到列表页location.href="/page/list_project/";}else{// 让按钮生效,重新可点击$('#save').removeAttr('disabled');alert('添加失败')}},error: function (jqXHR, textStatus, e) {// 让按钮生效,重新可点击$('#save').removeAttr('disabled');alert("提交异常:"+e);}});}

这样就能解决快速点击,导致前端页面重复提交的问题

complete 完成请求

一般在 beforeSend 发请求之前禁用提交按钮,在请求完成之后移除 disabled 属性。
complete 是在完成请求的时候触发。

function project_save(){var $form = $("#form"); // The form instance$.ajax({type:'post',url:'/page',data: $form.serialize(),dataType:'json',beforeSend: function() {// 设置 disabled 阻止用户继续点击$('#save').attr('disabled', 'disabled');},complete: function () {// 请求完成移除 disabled 属性 $("#save").removeAttr("disabled");},success: function(data){if(data.code == 0){console.log("提交成功");// 重定向到列表页location.href="/page/list_project/";}else{// 让按钮生效,重新可点击alert('添加失败')}},error: function (jqXHR, textStatus, e) {alert("提交异常:"+e);}});}

python测试开发django-162.ajax 提交表单,防重复提交(beforeSend)相关推荐

  1. Spring MVC表单防重复提交

    转载自 Spring MVC表单防重复提交 利用Spring MVC的过滤器及token传递验证来实现表单防重复提交. 创建注解 @Target(ElementType.METHOD) @Retent ...

  2. 表单防重复提交拦截器

    表单防重复提交 http://blog.icoolxue.com/submitted-by-spring-mvc-to-prevent-data-duplication/

  3. 关于表单防重复提交一些东东

    前阵子弄了些表单防重复提交的东西,想整理整理,免得下次要用时再四处去找,其实这里的东西还是挺简单的. 原理: 在Session中保存一个表单的唯一编号,将该编号放在一个隐藏域中,同其他数据一同提交.在 ...

  4. python表单防重复提交_传统方式提交表单,防止重复提交问题?

    提交表单的时候,不是使用ajax提交,就是传统的表单提交,为防止表单重复提交,应该怎么写javascript或jquery代码呢?如果提交没成功,怎么恢复提交按钮? html如下: Email add ...

  5. python表单防重复提交_防止表单重复提交的几种策略

    表单重复提交是在多用户Web应用中最常见.带来很多麻烦的一个问题.有很多的应用场景都会遇到重复提交问题,比如: 点击提交按钮两次. 点击刷新按钮. 使用浏览器后退按钮重复之前的操作,导致重复提交表单. ...

  6. java表单防重复提交_防止表单重复提交的解决方案整理

    用户在操作表单Post数据时往往会出现表单数据重复提交的问题,尤其在Web开发中此类问题比较常见.刷新页面,后退操作以前的页面,单机多次按钮都会导致数据重复提交.此类问题是因为浏览器重复提交HTTP请 ...

  7. python表单防重复提交_关于PHP使用token防止表单重复提交的方法

    这篇文章主要介绍了PHP使用token防止表单重复提交的方法,通过生成一个加密后的随机数存入session的token变量,同时将该值放入表单隐藏提交,达到防止表单重复提交的功能,需要的朋友可以参考下 ...

  8. python表单防重复提交_防止二次提交(重复提交)

    @每次请求时产生一个token(一般为时间戳),存于session中并随之用hidden提交,在servlet中判断接收到的token和session中的是否一致来判断是否重复提交,如果不是则重新产生 ...

  9. 表单的重复提交问题解决方案

    1.在我们的web开发中,常常会遇到表单的重复提交问题,那么我们的解决方案有两种:①重定向:response.sendrediect(); ②token的使用,即做个标记 下面写一个token的例子: ...

  10. 利用beforeSend实现提交加载中、form表单的重复提交等前端功能

    前文   在用JQ+bootstrap写前端的时候,有时需要实现点击按钮后失效的功能,比如下载按钮,为了避免网络延迟而引起的页面不及时跳转,让用户多次点击按钮,造成的服务器压力和用户体验就都不友好.发 ...

最新文章

  1. FGPA 双向 IO 自动方向控制
  2. .NET源码反编译和加密
  3. 通过WordPress内置函数批量添加文章
  4. java单词查找树_Trie 单词查找树 java实现(来自算法第4版)
  5. golang文件夹位置判断
  6. 敏捷开发般若敏捷系列之六:如何推广敏捷(下)(以无我之心,行无住之法)...
  7. LTE学习:传输块大小的计算
  8. php filtervar函数用法,PHP过滤器 filter_has_var() 函数用法实例分析
  9. C++学习笔记-异常处理
  10. php编译gd支持gif,我可以使用php和gd检测GIF动画吗?
  11. linux2.6.34编译安装,busybox linux-2.6.2 编译安装中碰到的若干问题
  12. 3dmax软件怎么贴图
  13. oracle 查询去年同期,Oracle求近7日累計值和去年同期值
  14. BlockChain学习——Hash函数碰撞概率公式及其推导
  15. 耦合度如何降低耦合度
  16. JS刷剑指offer(待更新)
  17. SRT视频字幕的解析与同步原理
  18. 24点游戏(自动生成随机数)
  19. git基础之切换分支
  20. 详解MySQL之事务

热门文章

  1. NLP中的数据增强方法综述
  2. Android8.1.0安卓源码编译
  3. powerDesigner 生成SQL时没有注释问题
  4. react中的 PropTypes使用
  5. 如何取消开盖自动开机的功能
  6. linux文件管理知识点总结,Linux基本知识点总结——磁盘配额
  7. Java中泛型总结(全面)
  8. PHP 根据身份证号码,获取性别、获取生日、计算年龄、获取地址、获取生肖、获取星座、以及判断是否是身份证号...
  9. OpenCV 将视频截成等长的小片段
  10. 最新导则下生态环评报告编制技术暨报告篇、制图篇、指数篇、综合应用篇教程