这节主要内容是通过AJAX调用页面后台代码方法实现下拉框二级联动效果,实现步骤如下:
1.创建文件Recipe24.aspx,实现后台代码如下 :
// 引入命名空间
using System.Web.Services;
// 实现下拉框二级联动AJAX请求加载数据方法
[WebMethod()]
public static ArrayList GetSubList( string sBuyID)
{
ArrayList subList = new ArrayList();
if (sBuyID == " 1 " )
{
subList.Add( new ListItem( " 文艺 " , " 1 " ));
subList.Add( new ListItem( " 少儿 " , " 2 " ));
subList.Add( new ListItem( " 人文社科 " , " 3 " ));
subList.Add( new ListItem( " 科技 " , " 4 " ));
}
else if (sBuyID == " 2 " )
{
subList.Add( new ListItem( " 手机通讯 " , " 1 " ));
subList.Add( new ListItem( " 手机配件 " , " 2 " ));
subList.Add( new ListItem( " 摄影摄像 " , " 3 " ));
subList.Add( new ListItem( " 数码配件 " , " 4 " ));
}
return subList;
}
2.实现页面代码(HTML部分)如下:
< body >
< form id ="form1" runat ="server" >
< div align ="center" >
< fieldset style ="width: 400px; height: 150px;" >
< table border ="0" cellpadding ="10" cellspacing ="10" >
< tr >
< td >
< asp:DropDownList ID ="buyList" runat ="server" Width ="120px" >
< asp:ListItem Value ="0" Text =" --- 请选择 --- " ></ asp:ListItem >
< asp:ListItem Value ="1" Text ="图书" ></ asp:ListItem >
< asp:ListItem Value ="2" Text ="手机数码" ></ asp:ListItem >
</ asp:DropDownList >
</ td >
< td >
< asp:DropDownList ID ="subList" runat ="server" Width ="120px" >
< asp:ListItem Value ="0" Text =" --- 请选择 --- " ></ asp:ListItem >
</ asp:DropDownList >
</ td >
</ tr >
</ table >
</ fieldset >
</ div >
</ form >
</ body >
3.实现脚本代码如下:
< script type ="text/javascript" >
$( function () {
$( " #buyList " ).bind( " keyup change " , function (e) {
e.preventDefault();
// 首先初始化
$( " #subList " ).empty().append($( " <option></option> " ).val( " 0 " ).html( " --- 请选择 --- " ));
if ($( this ).val() != " 0 " ) {
sendData($( this ).val());
}
});
function sendData(sBuyID) {
var loc = window.location.href;
$.ajax({
type: " POST " ,
url: loc + " /GetSubList " , // 调动后台页面方法
data: ' {"sBuyID":" ' + sBuyID + ' "} ' ,
contentType: " application/json; charset=utf-8 " ,
dataType: " json " ,
success: function (msg) {
// msg.d是数组,由后台数组ArrayList返回,因此可以遍历每个元素
$.each(msg.d, function () {
// this.Value和this.Text是后台返回数组ArrayList类型包含元素ListItem类型的属性
$( " #subList " ).append($( " <option></option " ).val( this .Value).html( this .Text));
});
},
error: function () {
alert( " ajax请求发生错误 " );
}
});
}
});
</ script >
4.下拉框二级联动效果图:
5.分析XmlHttpRequest对象,可看到请求响应的数据msg.d的结构如下(通过下图就知道msg.d的每个元素为什么会有Text和Value属性了):
今天发现一个问题,就是以上代码如果在VS2005建立的项目里面运行,AJAX会报JSON对象错误,但在VS2010项目里面运行正常,一直没找到原因,哪位高手如果知道其原因,请告知,谢谢。