2011-09-08 64 views
0

我正在javascript/asp.net中構建日曆。在javascript循環中調用ASP.NET Webservice會導致問題

當我打印日曆時,我想每天檢查是否有項目(約會)要顯示。這裏是功能的一部分:

for (var i = 1; i <= monthdays[month - 1]; i++) { 
     curnum++; 
     td = tr.insertCell(-1); 
     td.style.height = "95px"; 
     td.style.width = "131px"; 
     html = "<div id=\"divday" + year + "" + month + "" + i + "\" style=\"position:relative; left:0px; top:0px; width130px; height:95px; background-color:" + colors[i % 2] + "; cursor:pointer; \" onclick=\"openDay(" + year + "," + (month < 10 ? "0" + month : month) + "," + (i < 10 ? "0" + i : i) + ")\">"; 
     html += "<div class=\"blackl\" style=\"position:absolute; left:100px; top:0px; width:30px; height:20px; text-align:right; \">" + i + "</div>"; 
     html += "</div>"; 
     td.innerHTML = html; 
     if (curnum == 7) { 
      tr = tbl.insertRow(-1); 
      curnum = 0; 
     } 
     if(i == 1) RCalendar.GetCalendarEvents(agentid, year, month, i, function (result) { setCalendarEvents(year, month, i, result) }); 

最後一行不應該有if(i == 1)它只是爲了調試。我想打電話給web服務,並寫下這些日子(i)的項目。

這裏是回調函數:

function setCalendarEvents(y, m, d, result) { 
    var daydiv = document.getElementById("divday" + y + m + d); 
    for(var i = 0; i < result.length; i++) { 
     var thiscalendaritem = result[i]; 
     daydiv.innerHTML += makeCalendarItem(thiscalendaritem); 
    } 
} 

如果我把一個斷點在Web服務調用,並在callbackFunction參數,i和d是不一樣的。當它被調用時,我是1(顯然),但在setCalendarEvents被調用時,d是31.

回答

0

1)如果下一行使用異步調用:

if(i == 1) RCalendar.GetCalendarEvents(agentid, year, month, i, 
             function (result) { 
              setCalendarEvents(year, month, i, result) 
             }); 

嘗試改變這樣的,例如:

if(i == 1) RCalendar.GetCalendarEvents(agentid, year, month, i, 
             setCalendarEvents.bind(null, year, month, i)); 

當異步請求i後調用setCalendarEvents完成函數setCalendarEvents接收4個參數(年,月,我 - 無變化)和result(最後一個參數)。

2)檢查YOUT下一行:

"<div id=\"divday" + year + "" + month + "" + i + ... 

var daydiv = document.getElementById("divday" + y + m + d); 

對於年份:2012,月:1天:12 - ID是等於divday2012112

對於年份:2012 ,month:11,day:2 - id等於divday2012112(與以前的div相同)

+0

關於從服務器獲取所有事件而不是每天有意義的第一條評論,並且我將它解決爲這樣​​:(在繪製日間divs的循環之後...) 'getAllCalendarItemsInMonth(agentid,year,month ); (agentid,year,month){ } 函數getAllCalendarItemsInMonth(agentid,year,month) } '也感謝divday + datestring,但由於這個日曆一次僅顯示一個月,所以這不是一個主要問題。 – Jesper