我有一个$("").load
调用来获取数据并将其转储到几个div中。每个div都有一个唯一的ID,我跟踪For循环中的索引变量。我在这个循环中做了几个ajax调用。在回调函数中,我想再次使用该索引的值。但是,在回调执行时,for循环已经完成,索引变量始终具有循环的上限值。
如何将值传递给此索引到回调函数?
编辑:
for (var i=1;i<=daysNum;i++)
{
var tomorrow = new Date();
tomorrow.setDate(tomorrow.getDate() + i);
var tmd=(tomorrow.getMonth()+1)+'/'+(tomorrow.getDate())+'/'+tomorrow.getFullYear();
var tmdurl=(tomorrow.getMonth()+1)+'%2F'+(tomorrow.getDate())+'%2F'+tomorrow.getFullYear();
$("#events").append("<div><div id='event"+i+"'></div><div id='date"+i+"'>"+tmd+"</div></div>");
$("#event"+i).load(seicalendarurl+"/calendar.aspx?CalendarDate="+tmdurl+"&CalendarPeriod=Day .ms-cal-tdayitem, .ms-cal-alldayevent"
, function (data){
if($("event"+i).html()=="")
$("date"+i).html("");
}
);
}
答案 0 :(得分:5)
您可以将entier循环体(或仅Ajax部分)包装到立即函数中,并将索引作为参数传递:
for(var i=1;i<=daysNum;i++) {
// other stuff
(function(index) {
$("#event"+index).load('...', function (){
if($("#event"+index).html() === "") // you need `#` here too!
$("#date"+index).empty(); // you need `#` here too!
});
}(i));
}
但你不一定需要索引。您可以使用#eventX
访问回调内的this
元素,#dateX
元素是下一个兄弟。所以你可以简单地做
for(var i=1;i<=daysNum;i++) {
// other stuff
$("#event"+index).load('...', function (){
if($(this).html() === "") {
$(this).next().empty();
}
});
}
更可读的imo。
答案 1 :(得分:1)
我认为问题在于加载回调函数。
在事件和日期元素选择器之前,您没有错过“#”。
尝试使用此版本进行加载回调:
function (data){
if($("#event"+i).html()=="")
$("#date"+i).html("");
}
答案 2 :(得分:1)
for(var i=0; i<x; i++){
Ajax(...,function(i) {
// in callback !
return function(data) {
//Work with i:)
};
}(i));
答案 3 :(得分:0)
我找不到更好的方法,但您可以使用带有数据参数的ajax请求发送索引,然后将其与回调中的响应一起返回。
答案 4 :(得分:0)
您可以将div唯一索引作为div ID,div .data()
或甚至metadata plugin传递。另一个选择是使用闭包。