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 相关文章推荐
js 单引号 传递方法
Jun 22 Javascript
jquery jqPlot API 中文使用教程(非常强大的图表工具)
Aug 15 Javascript
div当滚动到页面顶部的时候固定在顶部实例代码
May 27 Javascript
Bootstrap布局组件应用实例讲解
Feb 17 Javascript
关于安卓手机微信浏览器中使用XMLHttpRequest 2上传图片显示字节数为0的解决办法
May 17 Javascript
[Bootstrap-插件使用]Jcrop+fileinput组合实现头像上传功能实例代码
Dec 20 Javascript
js 客户端打印html 并且去掉页眉、页脚的实例
Nov 03 Javascript
Jquery遍历筛选数组的几种方法和遍历解析json对象,Map()方法详解以及数组中查询某值是否存在
Jan 18 jQuery
react配置antd按需加载的使用
Feb 11 Javascript
layui 点击重置按钮, select 并没有被重置的解决方法
Sep 03 Javascript
layui的表单验证支持ajax判断用户名是否重复的实例
Sep 06 Javascript
vue ref如何获取子组件属性值
Mar 31 Vue.js
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
两个开源的Php输出Excel文件类
2010/02/08 PHP
PHP APC配置文件2套和参数详解
2014/06/11 PHP
php实现的美国50个州选择列表实例
2015/04/20 PHP
phpMyAdmin安装并配置允许空密码登录
2015/07/04 PHP
Jquery 基础学习笔记之文档处理
2009/05/29 Javascript
Javascript的构造函数和constructor属性
2010/01/09 Javascript
为Extjs加加速(javascript加速)
2010/08/19 Javascript
JQuery 弹出框定位实现方法
2010/12/02 Javascript
深入理解JavaScript系列(28):设计模式之工厂模式详解
2015/03/03 Javascript
js小数运算出现多位小数如何解决
2015/10/08 Javascript
jQuery实现选项卡切换效果简单演示
2015/12/09 Javascript
JavaScript禁止用户多次提交的两种方法
2016/07/24 Javascript
微信小程序  简单实例(阅读器)的实例开发
2016/09/29 Javascript
AngularJS入门教程之MVC架构实例分析
2016/11/01 Javascript
利用node.js写一个爬取知乎妹纸图的小爬虫
2017/05/03 Javascript
在一般处理程序(ashx)中弹出js提示语
2017/08/16 Javascript
在vue项目中引入highcharts图表的方法(详解)
2018/03/05 Javascript
JavaScript多态与封装实例分析
2018/07/27 Javascript
关于AOP在JS中的实现与应用详解
2019/05/06 Javascript
js中的深浅拷贝问题简析
2019/05/10 Javascript
Vue父组件如何获取子组件中的变量
2019/07/24 Javascript
[06:10]6.81新信使新套装!给你一个炫酷的DOTA2
2014/05/06 DOTA
Python中对象的引用与复制代码示例
2017/12/04 Python
用pandas中的DataFrame时选取行或列的方法
2018/07/11 Python
Django ORM 常用字段与不常用字段汇总
2019/08/09 Python
jupyter notebook运行命令显示[*](解决办法)
2020/05/18 Python
animation和transition的区别
2020/10/12 HTML / CSS
经典c++面试题四
2015/05/14 面试题
Java基础面试题
2014/07/19 面试题
见习期自我鉴定
2014/01/31 职场文书
致跳远运动员加油稿
2014/02/11 职场文书
大学生个人自荐信
2014/02/24 职场文书
保密工作实施方案
2014/02/24 职场文书
演讲开头怎么书写?
2019/08/06 职场文书
redis实现共同好友的思路详解
2021/05/26 Redis
详细聊聊关于Mysql联合查询的那些事儿
2021/10/24 MySQL