详解闭包解决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 对话框的使用方法
Oct 24 Javascript
再论Javascript的类继承
Mar 05 Javascript
JavaScript面向对象(极简主义法minimalist approach)
Jul 17 Javascript
httpclient模拟登陆具体实现(使用js设置cookie)
Dec 11 Javascript
JS清空多文本框、文本域示例代码
Feb 24 Javascript
jquery获取复选框被选中的值
Apr 10 Javascript
无限树Jquery插件zTree的常用功能特性总结
Sep 11 Javascript
JavaScript 程序错误Cannot use 'in' operator to search的解决方法
Jul 10 Javascript
vue数据初始化initState的实例详解
Apr 11 Javascript
OpenLayers3实现鼠标移动显示坐标
Sep 25 Javascript
three.js中多线程的使用及性能测试详解
Jan 07 Javascript
vue使用localStorage持久性存储实现评论列表
Apr 14 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
个人站长制做网页常用的php代码
2007/03/03 PHP
php 小乘法表实现代码
2009/07/16 PHP
PHP生成UTF8文件的方法
2010/05/15 PHP
PHP几个数学计算的内部函数学习整理
2011/08/06 PHP
PHP基于php_imagick_st-Q8.dll实现JPG合成GIF图片的方法
2014/07/11 PHP
mac环境中使用brew安装php5.5.15
2014/08/18 PHP
php+redis实现消息队列功能示例
2019/09/19 PHP
基于Laravel-admin 后台的自定义页面用法详解
2019/09/30 PHP
jQuery的animate函数实现图文切换动画效果
2015/05/03 Javascript
小议JavaScript中Generator和Iterator的使用
2015/07/29 Javascript
JS实现随页面滚动显示/隐藏窗口固定位置元素
2016/02/26 Javascript
JS作用域链详解
2017/06/26 Javascript
Nodejs连接mysql并实现增、删、改、查操作的方法详解
2018/01/04 NodeJs
解决vue中对象属性改变视图不更新的问题
2018/02/23 Javascript
Angular 组件之间的交互的示例代码
2018/03/24 Javascript
Vue用v-for给循环标签自身属性添加属性值的方法
2018/10/18 Javascript
JavaScript设计模式之代理模式实例分析
2019/01/16 Javascript
ES6数组与对象的解构赋值详解
2019/06/14 Javascript
vue 实现路由跳转时更改页面title
2019/11/05 Javascript
Vue实现简单的留言板
2020/10/23 Javascript
[56:24]DOTA2上海特级锦标赛主赛事日 - 3 胜者组第二轮#1Liquid VS MVP.Phx第二局
2016/03/04 DOTA
如何将python中的List转化成dictionary
2016/08/15 Python
python+opencv3生成一个自定义纯色图教程
2020/02/19 Python
python初步实现word2vec操作
2020/06/09 Python
带你学习Python如何实现回归树模型
2020/07/16 Python
python调用有道智云API实现文件批量翻译
2020/10/10 Python
HTML5 canvas基本绘图之绘制矩形
2016/06/27 HTML / CSS
希尔顿酒店中国网站:Hilton中国
2017/03/11 全球购物
为什么使用接口?
2014/08/13 面试题
总经理岗位职责
2013/11/09 职场文书
外语系毕业生找工作的求职信
2013/11/28 职场文书
大学生军训感想
2014/02/16 职场文书
村长党的群众路线教育实践活动个人对照检查材料
2014/09/23 职场文书
敬业奉献模范事迹材料(2016精选版)
2016/02/26 职场文书
MySQL系列之开篇 MySQL关系型数据库基础概念
2021/07/02 MySQL
SQL注入详解及防范方法
2021/12/06 MySQL