当前位置: 移动技术网 > IT编程>开发语言>JavaScript > 详解闭包解决jQuery中AJAX的外部变量问题

详解闭包解决jQuery中AJAX的外部变量问题

2019年03月24日  | 移动技术网IT编程  | 我要评论

详解闭包解决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)));
      }
    }

感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!

如对本文有疑问, 点击进行留言回复!!

相关文章:

验证码:
移动技术网