[英]Calling ASP.NET Webservice in javascript loop causes problems
我正在javascript / asp.net中建立日歷。
當我打印日歷時,我想每天檢查是否有要顯示的項目(約會)。 這是函數的一部分:
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),僅用於調試。 我想打電話給網絡服務並寫出這兩個日子。
這是回調函數:
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);
}
}
如果我在調用webservice的地方以及在callbackfunction中放置一個斷點,則i和d不相同。 調用它時,i為1(顯然),但是在調用setCalendarEvents時,d為31。
Web方法的調用是異步的問題。 所以您已經調用了該方法,但是沒有等待完成。
在這篇文章中進行同步調用http://kpumuk.info/asp-net/synchronous-page-method-call-in-asp-net-ajax-library/
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));
當setCalendarEvents
異步請求完成后調用的函數setCalendarEvents接收4個參數(年,月,我-不改變)和result
(最后一個參數)。
2)檢查您的下一行:
"<div id=\"divday" + year + "" + month + "" + i + ...
var daydiv = document.getElementById("divday" + y + m + d);
年份:2012,月份:1,日期:12- id等於divday2012112
對於年:2012,月:11,天:2- ID等於divday2012112 (與上一個div相同)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.