簡體   English   中英

在JavaScript循環中調用ASP.NET Web服務會導致問題

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM