详解闭包解决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 相关文章推荐
Javascript this指针
Jul 30 Javascript
利用javascript实现一些常用软件的下载导航
Aug 03 Javascript
jQuery知识点整理
Jan 30 Javascript
使用jquery制作弹出框效果
Apr 03 Javascript
JS实现简单易用的手机端浮动窗口显示效果
Sep 07 Javascript
AngularJS开发教程之控制器之间的通信方法分析
Dec 25 Javascript
AngularJS中使用ngModal模态框实例
May 27 Javascript
基于Vue自定义指令实现按钮级权限控制思路详解
May 23 Javascript
详解Vue前端对axios的封装和使用
Apr 01 Javascript
vue中使用GraphQL的实例代码
Nov 04 Javascript
封装一下vue中的axios示例代码详解
Feb 16 Javascript
ant design pro中可控的筛选和排序实例
Nov 17 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 图像函数大举例(非原创)
2009/06/20 PHP
php中json_encode处理gbk与gb2312中文乱码问题的解决方法
2014/07/10 PHP
php实现当前页面点击下载文件的简单方法
2016/09/22 PHP
PHP使用Redis长连接的方法详解
2018/02/12 PHP
Web跨浏览器进程通信(Web跨域)
2013/04/17 Javascript
百度移动版的url编码解码示例
2014/04/29 Javascript
详细谈谈AngularJS的子级作用域问题
2016/09/05 Javascript
angularJS深拷贝详解
2017/03/23 Javascript
Vue.js实例方法之生命周期详解
2017/07/03 Javascript
简单的网页广告特效实例
2017/08/19 Javascript
js实现鼠标移动到图片产生遮罩效果
2017/10/21 Javascript
微信小程序slider组件使用详解
2018/01/31 Javascript
微信小程序位置授权处理方法
2019/06/13 Javascript
如何使用Jquery动态生成二级选项列表
2020/02/06 jQuery
为react组件库添加typescript类型提示的方法
2020/06/15 Javascript
Vue指令实现OutClick的示例
2020/11/16 Javascript
Python利用pyHook实现监听用户鼠标与键盘事件
2014/08/21 Python
Python内置函数Type()函数一个有趣的用法
2015/02/18 Python
Python获取SQLite查询结果表列名的方法
2017/06/21 Python
python爬虫headers设置后无效的解决方法
2017/10/21 Python
用python做游戏的细节详解
2019/06/25 Python
如何在Cloud Studio上执行Python代码?
2019/08/09 Python
Pycharm创建项目时如何自动添加头部信息
2019/11/14 Python
解决tensorflow打印tensor有省略号的问题
2020/02/04 Python
python列表返回重复数据的下标
2020/02/10 Python
CSS3实现鼠标悬停显示扩展内容
2016/08/24 HTML / CSS
大学生工作求职信
2014/06/23 职场文书
给校长的一封检讨书
2014/09/20 职场文书
2015年个人实习工作总结
2014/12/12 职场文书
放牛班的春天观后感
2015/06/01 职场文书
李白经典诗之一:全文无一“月”字,却句句有月
2019/07/12 职场文书
大学校园餐饮创业计划书
2019/08/07 职场文书
JavaScript事件的委托(代理)的用法示例详解
2022/02/18 Javascript
python神经网络Xception模型
2022/05/06 Python
git stash(储藏)的用法总结
2022/06/25 Servers
windows11选中自动复制怎么开启? Win11自动复制所选内容的方法
2022/07/23 数码科技