博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
利用闭包实现多次ajax请求只执行最后一次
阅读量:4634 次
发布时间:2019-06-09

本文共 962 字,大约阅读时间需要 3 分钟。

  点一个按钮,则向服务器请求资源,不作处理时,多次点击后会有很多个请求在等待。我们知道一般我们用ajax是异步请求,那么我们快速重复点击一个按钮得到的结果其实我们并不知道是哪次点击的结果可能是第一次可能是最后一次也可能是第二次。那么我们怎么解决这个问题呢,简单粗暴的方法就是在发送请求的时候将按钮disabled在请求完成成功之后解除disabled,那么一旦请求失败请求将一直处于pending状态, 因此考虑的情况就多了success,error,complete等事件,而且不利于用户体验。ajax的abort方法可以很好的解决这个问题,但是使用这个abort();方法取消的时候,实际上会触发$.ajax success事件,所以在success是的回调函数需要添加判断ajax请求是否存在,存在才执行回调函数。

  我们项目上在使用ajax的时候是封装好的方法,在使用abort方法的时候考虑到可能出现多个请求同时进行,那么我们在封装的ajax方法里边是没有办法使用abort方法的,因为统一的方法只能执行一个请求(当然这是我们项目里边的方法是这样字的,大家可以根据自己封装的ajax方法进行综合考虑是用什么方法)。

  在解决重复请求的问题我们采用了单个问题单个解决的方法(当然这可能不是最好的方法,待优化~)

  1.定义一个全局变量var flag=0//用来记录点击次数;

  2.点击方法

    function requestEvent(){

      flag++;

      ...

      //ajax请求的回调函数

      callbackFun:(

        function(a){

          if(a<flag){

            return;

          }//判断当前回调函数是否是最后一次请求

          cb(res);//执行回调成功的函数方法

        }

      )(flag)

    }

   这里并没有取消重复请求而是只执行了最后一次请求的回调函数,菜菜一枚~大家有好的方法欢迎交流

转载于:https://www.cnblogs.com/lovelyRabbitBaby/p/6232984.html

你可能感兴趣的文章
The Knuth-Morris-Pratt Algorithm in my own words(转)
查看>>
374. Guess Number Higher or Lower
查看>>
目标反射回波检测算法及其FPGA实现 之一:算法概述
查看>>
php去除字符串首尾空格(包括全角)(转)
查看>>
第十一章
查看>>
.net实现跨页面传值
查看>>
第一篇博客,纪念一下,终于开通啦!
查看>>
0x22 迭代加深
查看>>
名字的漂亮度
查看>>
Python List append()方法
查看>>
产品经理之我见
查看>>
web渗透测试基本步骤
查看>>
把mysql 中的字符gb2312 改为gbk的方法
查看>>
使用Struts2标签遍历集合
查看>>
angular.isUndefined()
查看>>
第一次软件工程作业(改进版)
查看>>
WPF的图片操作效果(一):RenderTransform
查看>>
网络流24题-飞行员配对方案问题
查看>>
Jenkins 2.16.3默认没有Launch agent via Java Web Start,如何配置使用
查看>>
Excel的数据分析—排位与百分比
查看>>