当前位置: 首页 > news >正文

防止重复提交

简介

在现在的web开发中我们经常使用ajax从后端获取数据,提交数据。对于有些游戏爱好者或者手速甚快的同学来说,一个按钮触发click事件可以触发多次。有经验的前端开发者肯定会使用防止重复提交方式避免重复提交数据。有经验的后端则会在每次提交数据时加vision版本号。如果后端加版本号来验证,则需要前端每次提交时增加版本号这个字段。因此做防止重复提交还是交给伟大的前端同学哈!现在我就把我所使用的方式分享给大家。

<!DOCTYPE html>
<html>
    <head>
        <meta charset="UTF-8">
        <title>防止ajax重复提交</title>
    </head>
    <body>
        <button id="btn">提交</button>
        <script>

            /**
             * 模拟ajax提交
             * @fn 回调函数
             * */
            function Ajax(fn){
                setTimeout(function(){
                    var data= {result:true,msg:'提交成功!'};
                    fn(data);
                },2000);
            }
            /**
             * btn click 提交事件
             * 
             * */
            btn.onclick=function(){
                //检查 按钮是否被锁住,锁住直接rerun
                if(btn.getAttribute('lock')){
                    return;
                }
                //上锁
                btn.setAttribute('lock',1);
                //更改状态
                btn.innerText='提交中...';
                //模拟ajax提交
                Ajax(function(data){
                    //请求成功
                    if(data.result){
                        console.log('请求成功');
                        //请求成功解锁
                        btn.setAttribute('lock',"");
                        //还原状态
                        btn.innerText='提交';
                    }else{
                        console.log('请求失败');
                        //请求失败解锁
                        btn.setAttribute('lock',"");
                        //还原状态
                        btn.innerText='提交';
                    }
                });
            }
        </script>
    </body>
</html>复制代码

逻辑思路:
1.提交数据之前判断当前提交按钮是否存在lock锁
2.在ajax提交之前给提交按钮上锁
3.ajax成功之后或者失败之后解锁
demo连接 sandbox.runjs.cn/show/3jrhzr…

总结

防止重复提交在开发中很实用,希望能够帮到你。

相关文章:

  • SQL合并数据
  • jdk1.8新特性
  • RedHat5实现负载均衡(LVS--DR方法实现)
  • python接口自动化测试(八)-unittest-生成测试报告
  • CVE-2016-10191 FFmpeg RTMP Heap Buffer Overflow 漏洞分析及利用
  • 用好SQL事件探查器来跟踪SQL语句执行
  • 搭建LAMP架构
  • OSPF完全邻接关系形成(摘抄TCP/IP路由技术-卷一)
  • 设计模式的最根本原则
  • HBase
  • 10个C#编程和Visual Studio使用技巧
  • .net 受管制代码
  • vue的计算属性选项
  • 24、Windows派遣函数(2)-Windows驱动开发详解笔记,直接读写方式
  • Unity类继承关系 图
  • Asm.js的简单介绍
  • CSS实用技巧
  • ECMAScript6(0):ES6简明参考手册
  • Median of Two Sorted Arrays
  • Redux系列x:源码分析
  • vue中实现单选
  • Webpack4 学习笔记 - 01:webpack的安装和简单配置
  • 记一次删除Git记录中的大文件的过程
  • 如何进阶一名有竞争力的程序员?
  • 如何利用MongoDB打造TOP榜小程序
  • 设计模式 开闭原则
  • 原生 js 实现移动端 Touch 滑动反弹
  • const的用法,特别是用在函数前面与后面的区别
  • k8s使用glusterfs实现动态持久化存储
  • ​低代码平台的核心价值与优势
  • ​一帧图像的Android之旅 :应用的首个绘制请求
  • !! 2.对十份论文和报告中的关于OpenCV和Android NDK开发的总结
  • #android不同版本废弃api,新api。
  • (1)常见O(n^2)排序算法解析
  • (javascript)再说document.body.scrollTop的使用问题
  • (笔试题)分解质因式
  • (二)pulsar安装在独立的docker中,python测试
  • (二)构建dubbo分布式平台-平台功能导图
  • (附源码)ssm捐赠救助系统 毕业设计 060945
  • (亲测)设​置​m​y​e​c​l​i​p​s​e​打​开​默​认​工​作​空​间...
  • (三) diretfbrc详解
  • (十六)Flask之蓝图
  • (十六)一篇文章学会Java的常用API
  • (原創) 如何動態建立二維陣列(多維陣列)? (.NET) (C#)
  • (转)创业家杂志:UCWEB天使第一步
  • ***通过什么方式***网吧
  • .[hudsonL@cock.li].mkp勒索病毒数据怎么处理|数据解密恢复
  • .desktop 桌面快捷_Linux桌面环境那么多,这几款优秀的任你选
  • .NET Core 2.1路线图
  • .net 程序发生了一个不可捕获的异常
  • .NET业务框架的构建
  • :=
  • @RequestParam @RequestBody @PathVariable 等参数绑定注解详解
  • @Service注解让spring找到你的Service bean
  • [100天算法】-不同路径 III(day 73)