详解闭包解决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 相关文章推荐
学习面向对象之面向对象的基本概念:对象和其他基本要素
Nov 30 Javascript
始终在屏幕中间显示Div的代码(css+js)
Mar 10 Javascript
Javascript实现div的toggle效果实例分析
Jun 09 Javascript
js实现选中页面文字将其分享到新浪微博
Nov 05 Javascript
jQuery插件MovingBoxes实现左右滑动中间放大图片效果
Feb 28 Javascript
JavaScript中使用webuploader实现上传视频功能(demo)
Apr 10 Javascript
laravel5.4+vue+element简单搭建的示例代码
Aug 29 Javascript
深入浅析Node.js 事件循环、定时器和process.nextTick()
Oct 22 Javascript
详解如何使用koa实现socket.io官网的例子
Nov 04 Javascript
vue--vuex详解
Apr 15 Javascript
vue中使用vue-print.js实现多页打印
Mar 05 Javascript
详解Typescript 内置的模块导入兼容方式
May 31 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
基于empty函数的判断详解
2013/06/17 PHP
php解析base64数据生成图片的方法
2016/12/06 PHP
laravel中命名路由的使用方法
2017/02/24 PHP
PHP工厂模式的日常使用
2019/03/20 PHP
php-7.3.6 编译安装过程
2020/02/11 PHP
JavaScript定义类或函数的几种方式小结
2011/01/09 Javascript
js返回上一页并刷新代码整理
2012/12/21 Javascript
JavaScript必知必会(十) call apply bind的用法说明
2016/06/08 Javascript
浅谈javascript中的constructor
2016/06/08 Javascript
js数组常用操作方法小结(增加,删除,合并,分割等)
2016/08/02 Javascript
NodeJS和BootStrap分页效果的实现代码
2016/11/07 NodeJs
简单三步实现报表页面集成天气
2016/12/15 Javascript
javascript闭包功能与用法实例分析
2017/04/06 Javascript
layui弹出层效果实现代码
2017/05/19 Javascript
JS文件中加载jquery.js的实例代码
2018/05/05 jQuery
微信小程序3D轮播实现代码
2019/09/19 Javascript
浅谈vue的第一个commit分析
2020/06/08 Javascript
[04:01]2014DOTA2国际邀请赛 TITAN告别Ohaiyo期望明年再战
2014/07/15 DOTA
python实现linux服务器批量修改密码并生成execl
2014/04/22 Python
Python查找两个有序列表中位数的方法【基于归并算法】
2018/04/20 Python
python实现嵌套列表平铺的两种方法
2018/11/08 Python
Python面向对象总结及类与正则表达式详解
2019/04/18 Python
python中的Elasticsearch操作汇总
2019/10/30 Python
基于python plotly交互式图表大全
2019/12/07 Python
解决Python3.7.0 SSL低版本导致Pip无法使用问题
2020/09/03 Python
HTML5 贪吃蛇游戏实现思路及源代码
2013/09/03 HTML / CSS
YesBabyOnline美国:全球性的在线婚纱礼服工厂
2018/05/05 全球购物
迟到检讨书900字
2014/01/14 职场文书
2014年机关植树节活动方案
2014/02/27 职场文书
预备党员承诺书
2014/03/25 职场文书
新年主持词
2014/03/27 职场文书
电子装配专业毕业生求职信
2014/04/23 职场文书
践行党的群众路线心得体会
2014/11/05 职场文书
学校世界艾滋病日宣传活动总结
2015/05/05 职场文书
springboot集成springCloud中gateway时启动报错的解决
2021/07/16 Java/Android
python分分钟绘制精美地图海报
2022/02/15 Python