按钮限制:避免重复或多次点击事件

需求说明

相信大家在提交表单给后端时,时不时由于网络延迟的问题导致,重复提交表单,进而网络好了,就多了好几条数据。那么到底该如何解决这种问题呢!下面小编带你一起来探索与解决

探索

以前小编以为这个是后端责任,为何呢?因为后端没有限制一个时间段之内最多请求几次,想着我前端只要把参数(值)传给他就行,后来越想不对,这是它后端该怎么处理这个 问题不关我们的事,但我们前端也应该有自己的解决办法。

想到这,我们可以在事件上做处理,只要提交了,先不管提交成功还是提交失败,只要你一提交,我就关闭弹框,这样就避免了一个表单你多次提交,是的,这样是可以解决,但这种只有是表单是单独出来的组件才可以;想到这,还是不美,这对客户的体验感不好:为啥会这样说呢?如果还是网络延迟问题,提交了,弹框关闭了,数据没有自动刷新出来(一般是成功后,自动调用获取数据的接口或者刷新界面),这里就万一会给客户造成错误的引导,心里想:“刚才没有添加成功”,然后,客户又会继续之前的操作。避免了这个错误,但又引起了另一个错误,得不偿失啊!!!

话说换一个角度考虑,表单和展示数据的表格在一个界面(一个组件,也就是一个vue文件里),还是没有存根本上解决这个问题。

不行,继续想…

。。。。

那如果直接从按钮中控制呢,是不是可以?

嗯!!

可以的!!

那该怎么弄呢????

可不可以让它点击提交按钮后,按钮禁用几秒中呢

突然想起小编之前写过一篇给按钮加时间限制文章,话不多说,直接放链接

解决方法1:加时间限制

按钮+时间限制 <—链接处

这个方法小编觉得还是比较麻烦,那还有什么更简单的方法么???

继续陷入深思中…

有心不负功夫人

有,想到了,请看下面的方法2

解决方法2:根据el-button自带属性(loading)来限制

最好的解决方法就是给按钮加一个状态,如,提交后,后端未响应,显示“提交中”,这个也可以避免重复或多次提交(这样也避免了多次提交,只有上次的请求完成后,才会对按钮进行解放)
话不多说,上代码

<el-button type="primary" size="small" @click="submit()" :loading="loading">{{ submits }}</el-button>

loading是el-button特有的属性
定义:

<script>
	data(){
		return {
			submits: '提交',
             loading: false,
		}
	}
</script>
methods:{
    submit(){
        //this.submits = "提交中"
        //this.loading = true
        //  #这里的作用就是只要你点击“提交”事件,按钮立马变换状态和文字,不管后端接口访问成功还是失败,只要没有响应还是保持当前状态,这样就避免了重复或者多次提交
        this.$http.axios("url--",params,config).then(res=>{
            //this.submits = "提交中"
            //this.loading = true
            // # 这里是访问了接口,但没有响应,状态为“提交中”,原理是一样,只不过是在不同位置体现而已
            if(res.data.code === 200){
                this.submits = "提交"
                this.loading = false
            }else{
                this.submits = "提交"
                this.loading = false
            }
        })
    }
}

好了,到这里就结束了,同行大佬有什么更好的思路,欢迎评论区交流
觉得小编这篇文章写的可以,麻烦给小编点个赞,让更多的人看到

  • 3
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在Java中,避免重复提交通常可以通过以下几种方式来实现: 1. 前端验证:在前端页面使用JavaScript进行验证,例如通过禁用提交按钮或者设置提交按钮只能点击一次来防止重复提交。 2. Token验证:在后端生成一个唯一的Token并将其存储在session或者cookie中,然后将该Token传递给前端,在每次提交请求时都携带该Token。后端在处理请求时先验证Token的有效性,如果验证通过,则处理请求并将Token标记为已使用,否则拒绝请求。 3. 幂等性设计:在设计接口时考虑使用幂等性操作,即多次执行该操作所产生的结果与执行一次相同操作的结果相同。这样即使用户重复提交相同的请求,也不会对系统产生副作用。例如,在数据库中插入数据时,可以使用唯一约束来防止重复插入。 4. 限制时间窗口:在接收到请求后,在一定时间窗口内记录下该请求的唯一标识(如IP地址、用户ID等),并将其存储在缓存或数据库中。在处理后续请求时,先检查是否在时间窗口内存在相同标识的请求,如果存在,则拒绝处理。 5. 使用状态机:在处理请求的过程中使用状态机来记录请求的状态,例如将请求状态保存在数据库中。当接收到新的请求时,先检查请求的状态,如果已经处理过,则拒绝请求。 这些方法可以单独使用,也可以结合使用,根据具体的业务需求选择合适的方式来避免重复提交。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值