详解闭包解决jQuery中AJAX的外部变量问题


Posted in Javascript onFebruary 22, 2017

详解闭包解决jQuery中AJAX的外部变量问题

在AJAX中,我们经常都要使用外部变量,经常会多次使用,如下代码

function getCarInfo(){
      for(var i=0;i<4;i++){

        var carId = $("#carList0"+i+" #carId").val();
        var request = { 
          city: city,
          carId: carId
        };

        $.ajax({
           url:"enquiry",
          type:'post',
          data:request,
          //async: false,
          success:function(data){
            //alert(data);
            var strArr = data.split("#");
            $("#carList0"+i+" #distributorId").val(strArr[0]);
            $("#carList0"+i+" #font16").html(strArr[strArr.length-1]);
          }
        });

      }
    }

我期待的是按顺序alert(1) alert(2) alert(3) alert(4),但是实际上三次都是alert(4)

这均是由于AJAX异步导致的问题,设置同步(async: false,)就可以解决这个问题,但是随之而来的是,效率减低很多。这时可以轻松使用闭包解决问题:

function getCarInfo(){
      for(var i=0;i<4;i++){
      ((function(i){
        var carId = $("#carList0"+i+" #carId").val();
        var request = { 
          city: city,
          carId: carId
        };

        $.ajax({
           url:"enquiry",
          type:'post',
          data:request,
          //async: false,
          success:function(data){
            //alert(data);
            var strArr = data.split("#");
            $("#carList0"+i+" #distributorId").val(strArr[0]);
            $("#carList0"+i+" #font16").html(strArr[strArr.length-1]);
          }
        });
        }(i)));
      }
    }

感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!

Javascript 相关文章推荐
获取任意Html元素与body之间的偏移距离 offsetTop、offsetLeft (For:IE5+ FF1 )[
Dec 22 Javascript
Mootools 1.2 手风琴(Accordion)教程
Sep 15 Javascript
jquery 应用代码 方便的排序功能
Feb 06 Javascript
javascript的回调函数应用示例
Feb 20 Javascript
Javascript数组与字典用法分析
Dec 13 Javascript
javascript模拟C#格式化字符串
Aug 26 Javascript
fastclick插件导致日期(input[type=&quot;date&quot;])控件无法被触发该如何解决
Nov 09 Javascript
vue中v-cloak解决刷新或者加载出现闪烁问题(显示变量)
Apr 20 Javascript
webstorm和.vue中es6语法报错的解决方法
May 08 Javascript
手挽手带你学React之React-router4.x的使用
Feb 14 Javascript
解决elementUI 切换tab后 el_table 固定列下方多了一条线问题
Jul 19 Javascript
全局安装 Vue cli3 和 继续使用 Vue-cli2.x操作
Sep 08 Javascript
js实现PC端根据IP定位当前城市地理位置
Feb 22 #Javascript
纯JS实现轮播图
Feb 22 #Javascript
javascript 操作cookies详解及实例
Feb 22 #Javascript
jquery实现手机端单店铺购物车结算删除功能
Feb 22 #Javascript
js实现简易垂直滚动条
Feb 22 #Javascript
微信小程序 引用其他js文件实现代码
Feb 22 #Javascript
微信小程序本作用域下调用全局JS详解及实例
Feb 22 #Javascript
You might like
浅析PHP的ASCII码转换类
2013/07/05 PHP
PHP按行读取文件时删除换行符的3种方法
2014/05/04 PHP
Laravel中使用阿里云OSS Composer包分享
2015/02/10 PHP
innerHTML,outerHTML,innerTEXT三者之间的区别
2007/01/28 Javascript
jquery中使用ajax获取远程页面信息
2011/11/13 Javascript
自定义jQuery选项卡插件实例
2013/03/27 Javascript
jQuery实现点击该行即可删除HTML表格行
2014/10/17 Javascript
基于javascript实现窗口抖动效果
2016/01/03 Javascript
Js的Array数组对象详解
2016/02/22 Javascript
JS动态的把左边列表添加到右边的实现代码(可上下移动)
2016/11/17 Javascript
快速处理vue渲染前的显示问题
2018/03/05 Javascript
Vue的路由及路由钩子函数的实现
2019/07/02 Javascript
一个手写的vue放大镜效果
2019/08/09 Javascript
如何通过shell脚本自动生成vue文件详解
2019/09/10 Javascript
java和js实现的洗牌小程序
2019/09/30 Javascript
JavaScript实现栈结构Stack过程详解
2020/03/07 Javascript
angular *Ngif else用法详解
2020/12/15 Javascript
[34:47]完美世界DOTA2联赛PWL S2 Magma vs LBZS 第一场 11.18
2020/11/18 DOTA
在Python3中初学者应会的一些基本的提升效率的小技巧
2015/03/31 Python
python决策树之C4.5算法详解
2017/12/20 Python
python实现excel读写数据
2021/03/02 Python
Python面向对象基础入门之编码细节与注意事项
2018/12/11 Python
对python特殊函数 __call__()的使用详解
2019/07/02 Python
Python计算一个点到所有点的欧式距离实现方法
2019/07/04 Python
python3.7通过thrift操作hbase的示例代码
2020/01/14 Python
AmazeUI 缩略图的实现示例
2020/08/18 HTML / CSS
中国酒类在线零售网站:酒仙网
2016/08/20 全球购物
《我不是最弱小的》教学反思
2014/02/23 职场文书
关于读书的演讲稿400字
2014/08/27 职场文书
带香烟到学校抽的检讨书
2014/09/25 职场文书
论群众路线学习心得体会
2014/10/31 职场文书
毕业生个人总结
2015/02/28 职场文书
证券区域经理岗位职责
2015/04/10 职场文书
培训讲师开场白
2015/06/01 职场文书
浅析Redis Sentinel 与 Redis Cluster
2021/06/24 Redis
Spring Boot mybatis-config 和 log4j 输出sql 日志的方式
2021/07/26 Java/Android