我有以下代码,可在需要时提前一个月加载有关用户付款的信息。当我等待每个月加载时,该函数可以工作,但是当多个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();
});
}
+0
VAR loadedPaymentMonth =新PaymentMonth();创建一个新的PaymentMonth对象并将其插入到数组中。每个函数调用都应该创建一个新的paymentmonth对象。因此,虽然变量名称可能相同,但引用应该是特定于其创建的函数上下文的。 –