一聚教程网:一个值得你收藏的教程网站

热门教程

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

时间:2022-06-27 09:06:10 编辑:袖梨 来源:一聚教程网

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

在AJAX中,我们经常都要使用外部变量,经常会多次使用,如下代码

 

 代码如下复制代码

functiongetCarInfo(){

     for(vari=0;i<4;i++){

 

       varcarId = $("#carList0"+i+" #carId").val();

       varrequest = {

         city: city,

         carId: carId

       };

 

       $.ajax({

          url:"enquiry",

         type:'post',

         data:request,

         //async: false,

         success:function(data){

           //alert(data);

           varstrArr = 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,)就可以解决这个问题,但是随之而来的是,效率减低很多。这时可以轻松使用闭包解决问题:

 

 代码如下复制代码

functiongetCarInfo(){

  for(vari=0;i<4;i++){

  ((function(i){

    varcarId = $("#carList0"+i+" #carId").val();

    varrequest = {

      city: city,

      carId: carId

    };

 

    $.ajax({

       url:"enquiry",

      type:'post',

      data:request,

      //async: false,

      success:function(data){

        //alert(data);

        varstrArr = data.split("#");

        $("#carList0"+i+" #distributorId").val(strArr[0]);

        $("#carList0"+i+" #font16").html(strArr[strArr.length-1]);

      }

    });

    }(i)));

  }

}

 

热门栏目