详解闭包解决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高级程序设计 读书笔记之九 本地对象Array
Feb 27 Javascript
JavaScript高级程序设计(第3版)学习笔记8 js函数(中)
Oct 11 Javascript
js简单实现竖向tab选项卡的方法
May 04 Javascript
详解JavaScript中的forEach()方法的使用
Jun 08 Javascript
Google 地图叠加层实例讲解
Aug 06 Javascript
AngularJS中下拉框的高级用法示例
Oct 11 Javascript
vue2.0+ 从插件开发到npm发布的示例代码
Apr 28 Javascript
微信小程序表单弹窗实例
Jul 19 Javascript
Vue 嵌套路由使用总结(推荐)
Jan 13 Javascript
JavaScript实现好看的跟随彩色气泡效果
Feb 06 Javascript
JavaScript如何优化逻辑判断代码详解
Jun 08 Javascript
Vue3.0中Ref与Reactive的区别示例详析
Jul 07 Vue.js
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
YII框架模块化处理操作示例
2019/04/26 PHP
YII2框架中actions的作用与使用方法示例
2020/03/13 PHP
ASP小贴士/ASP Tips javascript tips可以当桌面
2009/12/10 Javascript
js中的数组Array定义与sort方法使用示例
2013/08/29 Javascript
利用javascript实现禁用网页上所有文本框,下拉菜单,多行文本域
2013/12/14 Javascript
JQuery插件fancybox无法在弹出层使用左右键的解决办法
2013/12/25 Javascript
一个JavaScript函数把URL参数解析成Json对象
2014/09/24 Javascript
使用JavaScript实现连续滚动字幕效果的方法
2015/07/07 Javascript
javascript中对象的定义、使用以及对象和原型链操作小结
2016/12/14 Javascript
vue2导航根据路由传值,而改变导航内容的实例
2017/11/10 Javascript
微信小程序中吸底按钮适配iPhone X方案
2017/11/29 Javascript
5分钟学会Vue动画效果(小结)
2018/07/21 Javascript
node错误处理与日志记录的实现
2018/12/24 Javascript
详解使用JWT实现单点登录(完全跨域方案)
2019/08/02 Javascript
一篇文章看懂JavaScript中的回调
2021/01/05 Javascript
Python实现二维有序数组查找的方法
2016/04/27 Python
Python3 实现随机生成一组不重复数并按行写入文件
2018/04/09 Python
python脚本当作Linux中的服务启动实现方法
2019/06/28 Python
python将字符串list写入excel和txt的实例
2019/07/20 Python
Python函数基本使用原理详解
2020/03/19 Python
详解pandas绘制矩阵散点图(scatter_matrix)的方法
2020/04/23 Python
Python函数必须先定义,后调用说明(函数调用函数例外)
2020/06/02 Python
简单掌握CSS3中resize属性的用法
2016/04/01 HTML / CSS
HTML5本地数据库基础操作详解
2016/04/26 HTML / CSS
如何判断一段程序是由C 编译程序还是由C++编译程序编译的
2013/08/04 面试题
行政主管岗位职责
2013/11/18 职场文书
公司年会晚宴演讲稿
2014/01/06 职场文书
协议书与合同的区别
2014/04/18 职场文书
体育活动总结范文
2014/05/04 职场文书
幼儿园门卫岗位职责范本
2014/07/02 职场文书
2014应届本科生自我评价
2014/09/13 职场文书
卖车协议书范例
2014/09/16 职场文书
2015新年寄语大全
2014/12/08 职场文书
元旦联欢晚会主持词
2015/07/01 职场文书
关于ObjectUtils.isEmpty() 和 null 的区别
2022/02/28 Java/Android
R9700摩机记
2022/04/05 无线电