详解闭包解决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 继承机制实例
Aug 12 Javascript
Jquery iframe内部出滚动条
Feb 11 Javascript
javaScript 删除字符串空格多种方法小结
Oct 24 Javascript
javascript 实现 秒杀,团购 倒计时展示的记录 分享
Jul 12 Javascript
jQuery中replaceWith()方法用法实例
Dec 25 Javascript
jQuery中hover方法搭配css的hover选择器,实现选中元素突出显示方法
May 08 jQuery
vue中的自定义分页插件组件的示例
Aug 18 Javascript
vue-vuex中使用commit提交mutation来修改state的方法详解
Sep 16 Javascript
vue单页缓存方案分析及实现
Sep 25 Javascript
浅谈js闭包理解
Apr 01 Javascript
详解es6新增数组方法简便了哪些操作
May 09 Javascript
vue点击标签切换选中及互相排斥操作
Jul 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导出EXCEL快速开发指南--PHPEXCEL的使用详解
2013/06/03 PHP
深入理解Yii2.0乐观锁与悲观锁的原理与使用
2017/07/26 PHP
PHP实现执行外部程序的方法详解
2017/08/17 PHP
Laravel如何使用数据库事务及捕获事务失败后的异常详解
2017/10/23 PHP
laravel7学习之无限级分类的最新实现方法
2020/09/30 PHP
Span元素的width属性无效果原因及解决方案
2010/01/15 Javascript
用jquery中插件dialog实现弹框效果实例代码
2013/11/15 Javascript
微信支付如何实现内置浏览器的H5页面支付
2015/09/25 Javascript
简单的JS时钟实例讲解
2016/01/13 Javascript
JavaScript实现Base64编码转换
2016/04/23 Javascript
jquery.multiselect多选下拉框实现代码
2016/11/11 Javascript
angular $watch 一个变量的变化(实例讲解)
2017/08/02 Javascript
利用JavaScript实现栈的数据结构示例代码
2017/08/02 Javascript
详解一个小实例理解js原型和继承
2019/04/24 Javascript
vue如何实现自定义底部菜单栏
2019/07/01 Javascript
Vue.js实现tab切换效果
2019/07/24 Javascript
JavaScript实现轮播图片完整代码
2020/03/07 Javascript
从源码角度来回答keep-alive组件的缓存原理
2021/01/18 Javascript
[03:38]2014DOTA2西雅图国际邀请赛 VG战队巡礼
2014/07/07 DOTA
[40:03]Liquid vs Optic 2018国际邀请赛淘汰赛BO3 第一场 8.21
2018/08/22 DOTA
详解Python中__str__和__repr__方法的区别
2015/04/17 Python
编写Python脚本把sqlAlchemy对象转换成dict的教程
2015/05/29 Python
Python向日志输出中添加上下文信息
2017/05/24 Python
python 实现将文件或文件夹用相对路径打包为 tar.gz 文件的方法
2019/06/10 Python
python实现输出一个序列的所有子序列示例
2019/11/18 Python
python文件路径操作方法总结
2020/12/21 Python
使用HTML5 Canvas为图片填充颜色和纹理的教程
2016/03/21 HTML / CSS
德国旅游网站:weg.de
2018/06/03 全球购物
成人大专生实习期的自我评价
2013/10/02 职场文书
高一家长会邀请函
2014/01/12 职场文书
学校食品安全实施方案
2014/06/14 职场文书
法制教育演讲稿
2014/09/10 职场文书
2014年个人业务工作总结
2014/11/17 职场文书
写给领导的感谢信
2015/01/22 职场文书
导游词之山西关帝庙
2019/11/01 职场文书
CSS使用SVG实现动态分布的圆环发散路径动画
2022/12/24 HTML / CSS