2011-09-21 14 views
0

如何動態地填充DDL列表(級聯ddl)使用jQuery的W/O毫安ajax框架或jQuery插件? (我工作的地方對我可以使用的圖書館非常有限)。我正在使用ASP.Net與jquery訪問asmx webmethod。在$就調用Web方法如下所示:級聯ddl與jquery,asmx,但不MS MS AJAX或插件

function getText() { 
    $.ajax({ 
     type: "POST", 
     url: "SearchFilters.asmx/HelloWorld", 
     dataType: "html", // also tried "text" 
     success: function(response) { 
      alert(response); 
      $("#ddlCase").html(response); 
     } 
    }); 
} 

這返回XML,看起來像以下:

<?xml version="1.0" encoding="utf-8"?> 
<string xmlns="http://tempuri.org/">&lt;option value='1'&gt;Hello World&lt;/option&gt;</string> 

在成功的功能,JS僅清除出的值ddl:

$("#ddlCase").html(response) 

可以這樣做嗎?我怎樣才能解碼返回的XML?我錯過了什麼?以前我嘗試過一種json的數據類型,但沒有成功。請參考以下內容:

using JQuery .ajax, a Success method is not called when using jquery 'json' vs 'text'

謝謝! D

回答

0

到底我的問題的根源是缺乏的[ScriptService]的班級裝修屬性。我改類declartion到:

[WebService(Namespace = "http://tempuri.org/")] 
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)] 
[ScriptService] 
public class SearchFilters : System.Web.Services.WebService { 
    [WebMethod] 
    public string HelloWorld() { 
     return ""; 
    } 
} 

使用招我發現返回以下錯誤信息:

只有Web服務與類 定義一個[ScriptService]屬性可以從腳本中調用

1

這是我幾個月前工作的示例代碼。

ASP.NET的HTML代碼,你有兩個下拉菜單一)B類)項目

我已經硬編碼與分類的第一個下拉列表:。水果,蔬菜和甜點。 Items DropDown最初是空的,因爲當類DropDown的onChange事件被觸發時,我們將通過jQuery AJAX填充這些內容。

<form id="form1" runat="server"> 
    <asp:DropDownList ID="ddlCategories" runat="server"> 
     <asp:ListItem>Select</asp:ListItem> 
     <asp:ListItem>Fruits</asp:ListItem> 
     <asp:ListItem>Vegetables</asp:ListItem> 
     <asp:ListItem>Desserts</asp:ListItem> 
    </asp:DropDownList> 
    <br /> 
<asp:DropDownList ID="ddlItems" runat="server"></asp:DropDownList> 
</form> 

<script type="text/javascript" src="jquery.js"></script> 
<script type="text/javascript"> 

$(document).ready(function(){ 

$("#<%=ddlCategories.ClientID %>").change(
    function() 
    { 
    var category = this.options[this.selectedIndex].value; 
    var ddlItems = document.getElementById("<%=ddlItems.ClientID%>"); 
    ddlItems.options.length = 0; 
    $.ajax 
    ({ 
     type: "POST", 
     contentType: "application/json; charset=utf-8", 
     url: "Webservice.asmx/getItems", 
     data: "{'category':'"+category+"'}", 
     dataType: "json", 
     success: function(msg) 
     { 
       var arrItems = msg.d.split("|"); 
       for(var i=0; i< arrItems.length; i++) 
       { 
       var opt = document.createElement("option"); 
       ddlItems.options.add(opt) 
       opt.text = arrItems[i]; 
       opt.value = arrItems[i]; 
       } 
     } 
    }); 
    } 
); 
}); 
</script> 


Webservice Code: 


[System.Web.Services.WebMethod] 
public static string getItems(string category) 
{ 
    string strItems = ""; 
    if (category == "Fruits") 
    { 
    strItems = "Apple|Orange|Pinapple|Grapes"; 
    } 
    else if (category == "Vegetables") 
    { 
    strItems = "Tomato|Cauliflower|Brinjal|Potato"; 
    } 
    else if (category == "Desserts") 
    { 
    strItems = "Cakes|Cookies|IceCreams|Pastries"; 
    } 
    return strItems; 
} 

問候,

賽義德

(請標記爲答案,如果您發現本文中的合適)