詳解閉包解決jQuery中AJAX的外部變量問題
詳解閉包解決jQuery中AJAX的外部變量問題
在AJAX中,我們經(jīng)常都要使用外部變量,經(jīng)常會多次使用,如下代碼
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異步導致的問題,設(shè)置同步(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)));
}
}
感謝閱讀,希望能幫助到大家,謝謝大家對本站的支持!
相關(guān)文章
jQuery Mobile的loading對話框顯示/隱藏方法分享
jQuery Mobile提供兩個方法,使得開發(fā)者在編寫JavaScript業(yè)務(wù)編輯時,可以隨意的控制loading提示框2013-11-11
利用jquery動畫特效和css打造的側(cè)邊彈出垂直導航
這是一款側(cè)邊彈出垂直導航,整個彈出過程比較流暢,而且代碼很簡單,需要的朋友可以參考下2014-04-04
jquery實現(xiàn)網(wǎng)頁查找功能示例分享
當需要在頁面中查找某個關(guān)鍵字時,一是可以通過瀏覽器的查找功能實現(xiàn),二是可以通過前端腳本準確查找定位,本文介紹通過jQuery實現(xiàn)的頁面內(nèi)容查找定位的功能,并可擴展顯示查找后的相關(guān)信息2014-02-02
Jquery1.9.1源碼分析系列(六)延時對象應(yīng)用之jQuery.ready
這篇文章主要介紹了Jquery1.9.1源碼分析系列(六)延時對象應(yīng)用之jQuery.ready的相關(guān)資料,需要的朋友可以參考下2015-11-11
jquery插件jquery.beforeafter.js實現(xiàn)左右拖拽分隔條對比圖片的方法
這篇文章主要介紹了jquery插件jquery.beforeafter.js實現(xiàn)左右拖拽分隔條對比圖片的方法,可實現(xiàn)圖片拖拽變換的功能,需要的朋友可以參考下2015-08-08

