2012-04-23 43 views
0

我在嘗試使用ajax/jquery/webmethod更新列表框。從檢查chrome中的開發人員工具中的網絡活動,我可以看到webmethod正在返回值,但這些值不會被附加到列表框中。所以我想這個問題必須與我的JavaScript代碼。有人可以看看代碼並告訴我爲什麼這不起作用嗎? listbod被稱爲ListBox1並位於Homepage.aspx頁面中。使用javascript將webmethod結果附加到列表框

$(function updateListbox() { 
var lBox = $('select[id$=ListBox1]'); 
setInterval(function() { 
    $.ajax({ 
     beforeSend: function (req) { 
      req.setRequestHeader("Accept", "application/json"); 
     }, 
     type: "POST", 
     url: "Homepage.aspx/getCurrentList", 
     data: "{}", 
     contentType: "application/json; charset=utf-8", 
     dataType: "json", 
     success: function (data) { 
      var results = data.d; 
      if (results.length > 0) { 
       var updatedList = []; 
       for (var i in results) { 
        updatedList.push(results[i]); 
       } 
       $(lBox).append(updatedList.join('')); 
      } 
      else alert("No new items to update..."); 
     } 
    }); 
}, 5000); 

});

[WebMethod()] 
    public static string[] getCurrentList() 
    { 
     int count = 0; 
     for(int i = 0; i < Global.ListUsers.Count(); i++) 
      count++; 

     string[] results = new string[count]; 

     for (int i = 0; i < count; i++) 
      results[i] = Global.ListUsers[i].Username.ToString();           

     return results; 
    } 

回答

1

如果你想通過項目的數組迭代,你想:

for (var i = 0; i < results.length; i++) { 

你有什麼會通過結果對象的屬性進行迭代。

另外,我不確定您選擇的方式。試試這個:

for (var i = 0; i < results.length; i++) { 
    lBox[0].options[i] = new Option(results[i], results[i], true, false) 
} 
+0

我試着按照你的建議,但結果仍然沒有被追加到列表框中。任何其他想法? – MattSull 2012-04-23 12:36:34

+0

現在正在工作,非常感謝!一個小問題,我登錄的第一個用戶會在列表框中出現兩次,隨後的用戶會根據需要出現一次。你有什麼想法可能會造成這種情況?它可能會降低到應用程序中其他位置的錯誤。 – MattSull 2012-04-23 17:22:45

+1

嗯,我認爲我粘貼的代碼應該是'lBox [0] .options [i] = ...'而不是'lBox [0] .options [i + 1] = ...'。除此之外,我看不到任何可能導致這種情況的代碼。 – Carl 2012-04-24 08:13:35