这是继"利用XMLHTTP无刷新获取数据"的另一篇关于XMLHTTP的应用.
关于XMLHTTP.可以说,是一个很好的接合剂.把客户端和服务端的距离拉近了.
利用XMLHTTP.我们可以实现很多好的想法.
这文章.实现了二级连动Select.
传统二级连动是把所有的数据都传到有客户端..
利用XMLHTTP.我们可以实时地返回我们所需要的数据.
select.htm
复制代码 代码如下:
<scriptlanguage="Javascript">
functionGetResult(str)
{
/*
*---------------GetResult(str)-----------------
*GetResult(str)
*功能:通过XMLHTTP发送请求,返回结果.
*参数:str,字符串,发送条件.
*实例:GetResult(document.all.userid.value);
*author:wanghr100(灰豆宝宝.net)
*update:2004-5-2719:02
*---------------GetResult(str)-----------------
*/
varoBao=newActiveXObject("Microsoft.XMLHTTP");
oBao.open("POST","Server.asp?sel="+str,false);
oBao.send();
//服务器端处理返回的是经过escape编码的字符串.
//通过XMLHTTP返回数据,开始构建Select.
BuildSel(unescape(oBao.responseText),document.all.sel2)
}
functionBuildSel(str,sel)
{
/*
*---------------BuildSel(str,sel)-----------------
*BuildSel(str,sel)
*功能:通过str构建Select.
*参数:str,字符串,由服务端返回的.有特定结构"字符串1,字符串2,字符串3"
*参数:sel,要构建的Select
*实例:BuildSel(unescape(oBao.responseText),document.all.sel2)
*author:wanghr100(灰豆宝宝.net)
*update:2004-5-2719:02
*---------------BuildSel(str,sel)-----------------
*/
//先清空原来的数据.
sel.options.length=0;
vararrstr=newArray();
arrstr=str.split(",");
//开始构建新的Select.
for(vari=0;i<arrstr.length;i++)
{
sel.options[sel.options.length]=newOption(arrstr,arrstr)
}
}
</script>
<selectname="sel"onChange="GetResult(this.value)">
<optionvalue="">请选择
<optionvalue="福建省">福建省
<optionvalue="湖北省">湖北省
<optionvalue="辽宁省">辽宁省
<select>
<selectname="sel2"></select>
server.asp服务器端处理.
复制代码 代码如下:
<%@Language="Javascript"%>
<%
functionOpenDB(sdbname)
{
/*
*---------------OpenDB(sdbname)-----------------
*OpenDB(sdbname)
*功能:打开数据库sdbname,返回conn对象.
*参数:sdbname,字符串,数据库名称.
*实例:varconn=OpenDB("database.mdb");
*author:wanghr100(灰豆宝宝.net)
*update:2004-5-128:18
*---------------OpenDB(sdbname)-----------------
*/
varconnstr="Provider=Microsoft.Jet.OLEDB.4.0;DataSource="+Server.MapPath(sdbname);
varconn=Server.CreateObject("ADODB.Connection");
conn.Open(connstr);
returnconn;
}
varoConn=OpenDB("data.mdb");
varprovince=Request("sel");
vararrResult=newArray();
varsql="selectcityfromchinawhereprovince='"+province+"'";
varrs=Server.CreateObject("ADODB.Recordset");
rs.Open(sql,oConn,1,1);
while(!rs.EOF)
{
//遍历所有适合的数据放入arrResult数组中.
arrResult[arrResult.length]=rs("city").Value;
rs.MoveNext();
}
//escape解决了XMLHTTP。中文处理的问题.
//数组组合成字符串.由","字符串连接.
Response.Write(escape(arrResult.join(",")));
%>
数据库设计
data.mdb
表china.
字段
id自动编号
province文本
city文本
表:china数据:
idprovincecity
1福建省福州市
2福建省厦门市
3福建省泉州市
4湖北省武汉市
5湖北省荆州市
6湖北省宜昌市
7辽宁省沈阳市
8辽宁省大连市
9辽宁省盘锦市