0
我有以下代碼,可在需要時提前一個月加載有關用戶付款的信息。當我等待每個月加載時,該函數可以工作,但是當多個Ajax請求正在運行時,它會失敗。基本上重複的數據被添加到我的monthData數組,這意味着loadedPaymentMonth被覆蓋每個函數調用。我想異步加載數據,所以有什麼想法?使用異步AJAX(使用jQuery)請求加載數據時覆蓋的變量
這不起作用:
var monthData=[];
function loadMonth(monthToLoad,curMonth){
$("#paymentContent").find(".loader").remove();
var monthToGet;
switch(monthToLoad){
case "Next": monthToGet=monthData.length-curMonth+1;
break;
case "Prev": monthToGet=-curMonth-1;
break;
case "This": monthToGet=currentMonthPointer-curMonth;
break;
}
var loadedPaymentMonth=new PaymentMonth();
if(monthToGet<0){
currentMonthPointer+=1;
monthData.unshift(loadedPaymentMonth);
}
else{
monthData.push(loadedPaymentMonth);
}
$.getJSON(host+"GetDataForMonth.aspx?StartMonth="+monthToGet,function(data){
loadedPaymentMonth.setMonthData(data.monthData,data.month,data.year);
if($("#paymentsContent").find(".loader").remove().length>0){
loadedPaymentMonth.createPaymentRowsForMonth();
}
}).error(function(){
$("#paymentsContent").find(".loader").remove();
});
}
這並不:
function loadMonth(monthToLoad,curMonth){
$("#paymentContent").find(".loader").remove();
var monthToGet;
switch(monthToLoad){
case "Next": monthToGet=monthData.length-curMonth+1;
break;
case "Prev": monthToGet=-curMonth-1;
break;
case "This": monthToGet=currentMonthPointer-curMonth;
break;
}
var loadedPaymentMonth=new PaymentMonth();
if(monthToGet<0){
currentMonthPointer+=1;
monthData.unshift(loadedPaymentMonth);
}
else{
monthData.push(loadedPaymentMonth);
}
$.ajax({
url:host+"GetDataForMonth.aspx?StartMonth="+monthToGet,
async:false,
dataType:"json",
success:function(data){
loadedPaymentMonth.setMonthData(data.monthData,data.month,data.year);
if($("#paymentsContent").find(".loader").remove().length>0){
loadedPaymentMonth.createPaymentRowsForMonth();
}
}
}).error(function(){
$("#paymentsContent").find(".loader").remove();
});
}
VAR loadedPaymentMonth =新PaymentMonth();創建一個新的PaymentMonth對象並將其插入到數組中。每個函數調用都應該創建一個新的paymentmonth對象。因此,雖然變量名稱可能相同,但引用應該是特定於其創建的函數上下文的。 –