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 相关文章推荐
node.js中的fs.lstatSync方法使用说明
Dec 16 Javascript
AngularJS中的作用域实例分析
May 16 Javascript
JS的函数调用栈stack size的计算方法
Jun 24 Javascript
D3.js(v3)+react 实现带坐标与比例尺的散点图 (V3版本)
May 09 Javascript
详解VUE调用本地json的使用方法
May 15 Javascript
通过实践编写优雅的JavaScript代码
May 30 Javascript
如何在项目中使用log4.js的方法步骤
Jul 16 Javascript
基于vue的tab-list类目切换商品列表组件的示例代码
Feb 14 Javascript
js实现简单抽奖功能
Nov 24 Javascript
Antd表格滚动 宽度自适应 不换行的实例
Oct 27 Javascript
js实现弹窗猜数字游戏
Nov 26 Javascript
低门槛开发iOS、Android、小程序应用的前端框架详解
Oct 16 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
使用PHPUnit进行单元测试并生成代码覆盖率报告的方法
2019/03/08 PHP
JavaScript中this关键字使用方法详解
2007/03/08 Javascript
Array.prototype.slice.apply的使用方法
2010/03/17 Javascript
extjs grid设置某列背景颜色和字体颜色的实现方法
2010/09/06 Javascript
js操作输入框提示信息且响应鼠标事件
2014/03/25 Javascript
JavaSript中变量的作用域闭包的深入理解
2014/05/12 Javascript
Javascript中的arguments与重载介绍
2015/03/15 Javascript
JavaScript函数的一些注意要点小结及js匿名函数
2015/11/10 Javascript
JS面向对象编程详解
2016/03/06 Javascript
BootStrap日期控件在模态框中选择时间下拉菜单无效的原因及解决办法(火狐下不能点击)
2016/08/18 Javascript
浅述Javascript的外部对象
2016/12/07 Javascript
微信小程序 图片边框解决方法
2017/01/16 Javascript
关于react-router的几种配置方式详解
2017/07/24 Javascript
利用nvm管理多个版本的node.js与npm详解
2017/11/02 Javascript
基于vue-ssr服务端渲染入门详解
2018/01/08 Javascript
详解webpack babel的配置
2018/01/09 Javascript
python中urllib模块用法实例详解
2014/11/19 Python
讲解Python中的递归函数
2015/04/27 Python
Python实现的微信公众号群发图片与文本消息功能实例详解
2017/06/30 Python
python pandas库的安装和创建
2019/01/10 Python
使用Python+wxpy 找出微信里把你删除的好友实例
2019/02/21 Python
Python学习笔记之变量、自定义函数用法示例
2019/05/28 Python
深入了解Django View(视图系统)
2019/07/23 Python
Django后端按照日期查询的方法教程
2021/02/28 Python
TIME时代杂志台湾总代理:台时亚洲
2018/10/22 全球购物
MIKI HOUSE美国官方网上商店:日本领先的婴儿和儿童高级时装品牌
2020/06/21 全球购物
Wiggle澳大利亚:自行车、跑步、游泳商店
2020/11/07 全球购物
介绍一下SQL Server里面的索引视图
2016/07/31 面试题
数控技术与应用毕业生自荐信
2013/09/24 职场文书
外企财务年会演讲稿
2014/01/03 职场文书
营销计划书
2015/01/17 职场文书
考试作弊检讨书
2015/01/27 职场文书
Django操作cookie的实现
2021/05/26 Python
python自动计算图像数据集的RGB均值
2021/06/18 Python
vue项目中的支付功能实现(微信支付和支付宝支付)
2022/02/18 Vue.js
详解JSON.parse和JSON.stringify用法
2022/02/18 Javascript