详解闭包解决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 相关文章推荐
jQuery 1.0.2
Oct 11 Javascript
js一般方法改写成面向对象方法的无限级折叠菜单示例代码
Jul 04 Javascript
jQuery插件zepto.js简单实现tab切换
Jun 16 Javascript
javascript实现信息增删改查的方法
Jul 25 Javascript
js实现简易的单数字随机抽奖(0-9)
Mar 19 Javascript
JS组件系列之Bootstrap Icon图标选择组件
Jan 28 Javascript
JS基于onclick事件实现单个按钮的编辑与保存功能示例
Feb 13 Javascript
IScroll5实现下拉刷新上拉加载的功能实例
Aug 11 Javascript
vue项目优化之通过keep-alive数据缓存的方法
Dec 11 Javascript
微信小程序使用Vant Weapp组件库的方法步骤
Aug 01 Javascript
vue 更改连接后台的api示例
Nov 11 Javascript
在node环境下parse Smarty模板的使用示例代码
Nov 15 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数组分页实现方法
2016/04/30 PHP
PHP简单日历实现方法
2016/07/20 PHP
jscript之List Excel Color Values
2007/06/13 Javascript
jquery 经典动画菜单效果代码
2010/01/26 Javascript
扩展JS Date对象时间格式化功能的小例子
2013/12/02 Javascript
eclipse导入jquery包后报错的解决方法
2014/02/17 Javascript
javascritp添加url参数将参数加入到url中
2014/09/25 Javascript
前端js文件合并的三种方式推荐
2016/05/19 Javascript
网络传输协议(http协议)
2016/11/18 Javascript
详解webpack + vue + node 打造单页面(入门篇)
2017/09/23 Javascript
微信小程序实现点击效果
2019/06/21 Javascript
js+css实现扇形导航效果
2020/08/18 Javascript
vue+elementUI实现简单日历功能
2020/09/24 Javascript
在vs code 中如何创建一个自己的 Vue 模板代码
2020/11/10 Javascript
[44:33]EG vs Liquid 2018国际邀请赛小组赛BO2 第二场 8.18
2018/08/19 DOTA
使用Python脚本和ADB命令实现卸载App
2017/02/10 Python
Django 添加静态文件的两种实现方法(必看篇)
2017/07/14 Python
python os.path模块常用方法实例详解
2018/09/16 Python
Python3 利用requests 库进行post携带账号密码请求数据的方法
2018/10/26 Python
在python里协程使用同步锁Lock的实例
2019/02/19 Python
Python3 执行Linux Bash命令的方法
2019/07/12 Python
python用quad、dblquad实现一维二维积分的实例详解
2019/11/20 Python
Python3 shelve对象持久存储原理详解
2020/03/23 Python
python要安装在哪个盘
2020/06/15 Python
python操作链表的示例代码
2020/09/27 Python
HTML5 canvas实现雪花飘落特效
2016/03/08 HTML / CSS
台湾前三大B2C购物网站:MOMO购物网
2017/04/27 全球购物
英国图书音像网站:Hive.co.uk(图书、电子书、DVD、蓝光、音乐CD等)
2017/10/16 全球购物
ghd官网:英国ghd直发器品牌
2018/05/04 全球购物
编码实现字符串转整型的函数
2012/06/02 面试题
超市重阳节活动方案
2014/02/10 职场文书
写好自荐信需做到的5要点
2014/03/07 职场文书
住房租房协议书
2014/08/20 职场文书
学校隐患排查制度
2015/08/05 职场文书
哪类餐饮行业,最适合在高校创业?
2019/08/19 职场文书
聘任书的格式及模板
2019/10/28 职场文书