vue解决一个方法同时发送多个请求的问题


Posted in Javascript onSeptember 25, 2018

在项目开发过程中,让人抓狂之一的问题就是一个点击事件,当快速点击的时候,它会重复发送多个请求。这是不允许出现的。

但是怎么解决这个问题呢?

一般处理方法,就是点击的时候,立刻将该按钮disabled,这样就可以避免重复发送请求了。但是我发现这个有一个弊端,那就是:

如果,该事件有许多的验证,比如电话、邮箱格式是否正确呀,必填的是否填了呀等等。一旦你点击就把按钮disabled了,发现该填的没填,回去填完后发现按钮不能点了?那是因为刚才点击的时候被你disabled了,所以还得在验证的方法中取消按钮的disable。就造成了你点击的时候,第一步,将按钮disable了,然后一步一步向下验证,如果验证出错,得取消disable,当所有验证通过了,在请求的回调函数中,成功了也要取消disable,失败了也要取消disable,因为失败了用户多半还会继续点两次,不取消disable会让用户发现怎么点不了了。这就造成了全篇都是按钮disable的设置与取消。一旦有修改,很难维护的。

在vue中,有一个lodash,我们只需引入就可以使用了。比如以下代码:

<template>
 <div>
 <div class="bindBtn">
  <button class="bindDataBtn" @click="postAction">提交</button>
 </div>
 </div>
</template>
<script>
import _ from 'lodash'
export default {
 data() {
 return {
 
 }
 },
 mounted() {
 
 },
 methods: {
 sendAjax(){
  /*这里是请求的接口、参数以及回调函数等*/
 },
 postAction(){
  this.doPostAction()
 }
 },
 created(){
 this.doPostAction = _.debounce(this.sendAjax,500);
 }
}
</script>

我们首先将发送请求的ajax方法写在一个函数里面,在这里就是sendAjax函数,其次,我们引入lodash,然后将sendAjax这个函数用一个方法自定义一下,在这里就是doPostAction,其中_是我们引入的lodash,_.debounce是一个限制操作频率的函数,里面的是500是毫秒单位。

当执行点击事件的时候,也就是postAction函数,我们只需要调用doPostAction这个函数就可以了,而那个500的功能就是你在这个时间段里,无论执行了多少次这个点击事件,它都只会执行一次。

这样就少了我们通篇disable来disable去

最后附上官网例子:点击前往

以上这篇vue解决一个方法同时发送多个请求的问题就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
一些经常会用到的Javascript检测函数
May 31 Javascript
YUI Compressor压缩JavaScript原理及微优化
Jan 07 Javascript
js post提交调用方法
Feb 12 Javascript
jquery实现效果比较好的table选中行颜色
Mar 25 Javascript
利用原生JavaScript获取元素样式只是获取而已
Oct 08 Javascript
js判断登录与否并确定跳转页面的方法
Jan 30 Javascript
详解handlebars+require基本使用方法
Dec 21 Javascript
AngularJS动态菜单操作指令
Apr 25 Javascript
webpack实现热更新(实施同步刷新)
Jul 28 Javascript
jQuery读取本地的json文件(实例讲解)
Oct 31 jQuery
Vue使用mixin分发组件的可复用功能
Sep 01 Javascript
vue实现吸顶、锚点和滚动高亮按钮效果
Oct 21 Javascript
Vue2.0学习系列之项目上线的方法步骤(图文)
Sep 25 #Javascript
在vue中多次调用同一个定义全局变量的实例
Sep 25 #Javascript
vue观察模式浅析
Sep 25 #Javascript
详解搭建es6+devServer简单开发环境
Sep 25 #Javascript
解决v-for中使用v-if或者v-bind:class失效的问题
Sep 25 #Javascript
在axios中使用params传参的时候传入数组的方法
Sep 25 #Javascript
VUE实现可随意拖动的弹窗组件
Sep 25 #Javascript
You might like
Mysql的常用命令
2006/10/09 PHP
MYSQL环境变量设置方法
2007/01/15 PHP
php与Mysql的一些简单的操作
2015/02/26 PHP
window.location.href = window.location.href 跳转无反应 a超链接onclick事件写法
2013/08/21 Javascript
jquery 清空file域示例(兼容个浏览器)
2013/10/11 Javascript
解析页面加载与js函数的执行 onload or ready
2013/12/12 Javascript
浅析js设置控件的readonly与enabled属性问题
2013/12/25 Javascript
jquery通过visible来判断标签是否显示或隐藏
2014/05/08 Javascript
jQuery中prevAll()方法用法实例
2015/01/08 Javascript
JavaScript中的值是按值传递还是按引用传递问题探讨
2015/01/30 Javascript
浅谈javascript中this在事件中的应用
2015/02/15 Javascript
Javascript中setTimeOut和setInterval的定时器用法
2015/06/12 Javascript
jQuery基本选择器(实例及表单域value的获取方法)
2016/05/20 Javascript
jQuery实现公告新闻自动滚屏效果实例代码
2016/07/14 Javascript
认识less和webstrom的less配置方法
2017/08/02 Javascript
利用JS动态生成隔行换色HTML表格的两种方法
2018/10/09 Javascript
微信小程序实现动态获取元素宽高的方法分析
2018/12/10 Javascript
JavaScript如何实现元素全排列实例代码
2019/05/14 Javascript
如何在Vue项目中添加接口监听遮罩
2021/01/25 Vue.js
Python的Flask框架中实现登录用户的个人资料和头像的教程
2015/04/20 Python
在Windows系统上搭建Nginx+Python+MySQL环境的教程
2015/12/25 Python
python中使用zip函数出现错误的原因
2018/09/28 Python
Python环境Pillow( PIL )图像处理工具使用解析
2019/09/12 Python
python如何从文件读取数据及解析
2019/09/19 Python
python找出列表中大于某个阈值的数据段示例
2019/11/24 Python
Python HTMLTestRunner如何下载生成报告
2020/09/04 Python
Pyinstaller打包Scrapy项目的实现步骤
2020/09/22 Python
Python urllib request模块发送请求实现过程解析
2020/12/10 Python
python实现代码审查自动回复消息
2021/02/01 Python
Dodax奥地利:音乐、电影、书籍、玩具、电子产品等
2019/08/31 全球购物
导游的职业规划书范文
2013/12/27 职场文书
美德好少年事迹材料
2014/01/19 职场文书
2014年村党支部工作总结
2014/12/04 职场文书
房产公证书格式
2015/01/26 职场文书
一篇文章弄懂MySQL查询语句的执行过程
2021/05/07 MySQL
关于SpringBoot 使用 Redis 分布式锁解决并发问题
2021/11/17 Redis