在AJAX中,咱們常常都要使用外部變量,常常會屢次使用,以下代碼html
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
這均是因爲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))); } }