详解闭包解决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 EasyUI API 中文文档 - ComboGrid 组合表格
Oct 13 Javascript
ExtJs设置GridPanel表格文本垂直居中示例
Jul 15 Javascript
判断客户浏览器是否支持cookie的示例代码
Dec 23 Javascript
js获取select标签选中值的两种方式
Jan 09 Javascript
jQuery中hide()方法用法实例
Dec 24 Javascript
JavaScript实现文字与图片拖拽效果的方法
Feb 16 Javascript
Node.js实现Excel转JSON
Apr 24 Javascript
JS弹出窗口插件zDialog简单用法示例
Jun 12 Javascript
全面了解javascript中的错误处理机制
Jul 18 Javascript
简单谈谈Javascript函数中的arguments
Feb 09 Javascript
使用puppeteer破解极验的滑动验证码
Feb 24 Javascript
Koa2 之文件上传下载的示例代码
Mar 29 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
用Socket发送电子邮件(利用需要验证的SMTP服务器)
2006/10/09 PHP
PHP中英混合字符串截取函数代码
2011/07/17 PHP
ThinkPHP路由详解
2015/07/27 PHP
php实现文件与16进制相互转换的方法示例
2017/02/16 PHP
php基于 swoole 实现的异步处理任务功能示例
2019/08/13 PHP
RR vs IO BO3 第一场2.13
2021/03/10 DOTA
List Information About the Binary Files Used by an Application
2007/06/18 Javascript
js获取上传文件大小示例代码
2014/04/10 Javascript
ECMAScript6中Map/WeakMap详解
2015/06/12 Javascript
小心!AngularJS结合RequireJS做文件合并压缩的那些坑
2016/01/09 Javascript
jQuery实现下拉框左右移动(全部移动,已选移动)
2016/04/15 Javascript
对Angular中单向数据流的深入理解
2018/03/31 Javascript
JS中call和apply函数用法实例分析
2018/06/20 Javascript
vue实现点击当前标签高亮效果【推荐】
2018/06/22 Javascript
使用VueCli3+TypeScript+Vuex一步步构建todoList的方法
2019/07/25 Javascript
VUE前后端学习tab写法实例
2019/08/06 Javascript
微信小程序防止多次点击跳转和防止表单组件输入内容多次验证功能(函数防抖)
2019/09/19 Javascript
vue vantUI实现文件(图片、文档、视频、音频)上传(多文件)
2019/10/15 Javascript
[01:28:43]2014 DOTA2华西杯精英邀请赛5 24 DK VS CIS
2014/05/25 DOTA
[00:14]PWL:老朋友Mushi拍VLOG与中国玩家问好
2020/11/04 DOTA
python利用MethodType绑定方法到类示例代码
2017/08/27 Python
python 寻找优化使成本函数最小的最优解的方法
2017/12/28 Python
Python 中的Selenium异常处理实例代码
2018/05/03 Python
Python检查 云备份进程是否正常运行代码实例
2019/08/22 Python
Numpy之将矩阵拉成向量的实例
2019/11/30 Python
Python基于read(size)方法读取超大文件
2020/03/12 Python
使用tensorflow根据输入更改tensor shape
2020/06/23 Python
英国最大的女性服装零售商:Dorothy Perkins
2017/03/30 全球购物
TCP协议通讯的过程和步骤是什么
2015/10/18 面试题
自动化专业大学生职业生涯规划范文:爱拚才会赢
2014/09/12 职场文书
不尊敬老师检讨书范文
2014/11/19 职场文书
大班下学期个人总结
2015/02/13 职场文书
三八节活动主持词
2015/07/04 职场文书
MySQL表的增删改查基础教程
2021/04/07 MySQL
Oracle设置DB、监听和EM开机启动的方法
2021/04/25 Oracle
JavaGUI模仿QQ聊天功能完整版
2021/07/04 Java/Android