欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

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

程序员文章站 2023-08-17 12:41:19
详解闭包解决jquery中ajax的外部变量问题 在ajax中,我们经常都要使用外部变量,经常会多次使用,如下代码 function getcarinfo()...

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

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