Ajax + Asp实现级联菜单

 

在一些时候常常用到一个一级列表框(姑且这么叫)和一个二级列表框(姑且这么叫),二级列表框的选项随一级列表改变而改变,为了完成这个任务,其中一种就是用ajax+asp实现实现,代码如下:

一个Ajax 请求文件ajax_func.js放在ajax文件夹里:

var http_request = false;
function send_request(method,url,content,responseType,callback){
http_request = false;
if(window.XMLHttpRequest){
      http_request = new XMLHttpRequest();
        if(http_request.overrideMimetype){
         http_request.overrideMimetype("text/xml");
      }
}
else if (window.ActiveXObject) {
try{
http_request = new ActiveXObject("Msxml.XMLHTTP");
}catch(E){
try{
http_request = new ActiveXObject("Microsoft.XMLHTTP");
}catch(E){}
}
}
if (!http_request){
window.alert("不能创建XMLHttpRequest对象实例!");
}
if(responseType.toLowerCase()=="text"){
http_request.onreadystatechange = callback;
}
else if (responseType.toLowerCase()=="xml"){
http_request.onreadystatechange = callback;
}
else{
window.alert("响应类别参数错误!");
return false;
}
if(method.toLowerCase()=="get"){
http_request.open(method,url,true);
}
else if (method.toLowerCase()=="post"){
http_request.open(method,url,true);
http_request.setRequestHeader("Content-Type","application/x-www-form-urlencoded");
}
else {
window.alert("http请求类别参数错误!");
return false;
}
http_request.send(content);
}
function processTextResponse(){
if(http_request.readyState==4){
      if (http_request.state == 200){
       alert("Text文档响应。");
      }else{
              alert("您所请求的页面有异常!");
              }
      }
}
function processXMLResponse(){
if(http_request.readyState==4){
      if (http_request.state == 200){
       alert("XML文档响应。");
      }else{
              alert("您所请求的页面有异常!");
              }
      }
}

一个连接数据库文件functiion.asp放在inc文件夹里:

<%
'用connection打开数据库
Sub kaiconn()
Dim dd
dd="Provider=microsoft.jet.oledb.4.0;data source="&Server.MapPath("data/supernews.mdb")
set conn=Server.CreateObject("ADODB.Connection")
conn.connectionstring=dd
conn.open
End Sub

'清空数据
Function QingKong(rs)
Set rs=Nothing
End Function

'关闭connection连接的数据库
Sub     guanconn()
conn.close
End Sub


'弹出对话框,及页面转向。
Function outmsg(massage,adress)
response.write"<SCRIPT LANGUAGE=javaScript>"&Chr(13)
response.write"<!--"&Chr(13)
response.write" alert("""&massage&""")"&Chr(13)
response.write "location.href="""&adress&""""&Chr(13)
response.write"-->"&Chr(13)
response.write"</SCRIPT>"&Chr(13)
End Function

%>

数据库supernews.mdb放在文件夹data里,表设计为:

生成XML文件为prov.asp,代码如下:

<?xml version="1.0" encoding="gb2312" ?>
<!--#include file="inc/function.asp"-->
<%
Response.ContentType ="text/xml"
Response.Charset = "GB2312"
Response.Buffer = True
Response.ExpiresAbsolute = Now() - 1
Response.Expires = 0
Response.CacheControl = "no-cache"
Response.AddHeader "Pragma", "No-Cache"
Dim prov
prov=request("id")
If prov="" Then
outmsg "非法登入!","city.htm"
End If
Dim conn,sql,rs,num
sql="select count(*) as num from tb_city where city_prov='"&prov&"'"
kaiconn
Set rs=conn.execute(sql)
num=rs("num")
%>
<citys>
<num><%=num%></num>
<%
sql="select city_city from tb_city where city_prov='"&prov&"'"
Set rs=conn.execute(sql)
If Not rs.eof Then
Do While Not rs.eof
%>
<city><%=rs("city_city")%></city>
<%
rs.movenext
Loop
End If
guanconn
QingKong(rs)
%>
</citys>
列表框页面代码为:
<script type="text/javascript" language="JavaScript" src="ajax/ajax_func.js"></script>
     <SCRIPT LANGUAGE="JavaScript">
     <!--
function clear(o){
l=o.length;
for (i = 0; i< l; i++){
o.options[1]=null;
}
}
     function change()
{
var prov=document.getElementById("prov").value;
if (prov=="")
{
return false;
}
send_request("get","prov.asp?id="+prov,null,"xml",chuli);
}
function chuli()
{
     if(http_request.readyState == 4)
      {
           if(http_request.status==200)
        {
       var oj=document.getElementById("city");
            clear(oj);
       var doc = http_request.responseXML;
   
var num=doc.getElementsByTagName("num")[0].firstChild.data;

      for (i=0;i<num;i++)
{
          var city=doc.getElementsByTagName("city")[i].firstChild.data;

      oj.add(new Option(city,city));
       }
         }
      else
      {
      alert("你请求的页面异常!");
      }
}
}
     //-->
     </SCRIPT>
<FORM METHOD=POST ACTION="" name="myform">
       <select name="prov" οnchange="change();" id="prov">
                                               <option value="">省份</option>
                                               <option value="北京市">北京市</option>
                                               <option value="天津市">天津市</option>
                                               <option value="河北省">河北省</option>
                                               <option value="山西省">山西省</option>
                                               <option value="内蒙古">内蒙古</option>
                                               <option value="辽宁省">辽宁省</option>
                                               <option value="吉林省">吉林省</option>
                                               <option value="黑龙江省">黑龙江省</option>
                                               <option value="上海市">上海市</option>
                                               <option value="江苏省">江苏省</option>
                                               <option value="浙江省">浙江省</option>
                                               <option value="安徽省">安徽省</option>
                                               <option value="福建省">福建省</option>
                                               <option value="台湾">台湾</option>
                                               <option value="江西省">江西省</option>
                                               <option value="山东省">山东省</option>
                                               <option value="河南省">河南省</option>
                                               <option value="湖北省">湖北省</option>
                                               <option value="湖南省">湖南省</option>
                                               <option value="广东省">广东省</option>
                                               <option value="香港特别行政区">香港特别行政区</option>
                                               <option value="澳门特别行政区">澳门特别行政区</option>
                                               <option value="广西壮族自治区">广西壮族自治区</option>
                                               <option value="海南省">海南省</option>
                                               <option value="重庆市">重庆市</option>
                                               <option value="四川省">四川省</option>
                                               <option value="贵州省">贵州省</option>
                                               <option value="云南省">云南省</option>
                                               <option value="西藏自治区">西藏自治区</option>
                                               <option value="陕西省">陕西省</option>
                                               <option value="甘肃省">甘肃省</option>
                                               <option value="青海省">青海省</option>
                                               <option value="宁夏回族自治区">宁夏回族自治区</option>
                                               <option value="新疆维吾尔族自治区">新疆维吾尔族自治区</option>  
                                          </select>

       <SELECT NAME="city" id="city">
<OPTION VALUE=""     >城市</option>
       </SELECT>
</FORM>
在IIS下运行( 必须在IIS下运行)效果如下:

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
三级级联下拉菜单可以通过Jquery+Ajax实现,以下是一个简单的示例代码: HTML代码: ```html <select id="province"> <option value="">请选择省份</option> <option value="北京">北京</option> <option value="上海">上海</option> <option value="广东">广东</option> </select> <select id="city"> <option value="">请选择城市</option> </select> <select id="district"> <option value="">请选择区县</option> </select> ``` Jquery+Ajax代码: ```javascript $(document).ready(function() { // 加载省份列表 $.ajax({ type: "GET", url: "province.php", success: function(data) { $("#province").append(data); } }); // 省份选项改变时,加载城市列表 $("#province").change(function() { var province = $(this).val(); $("#city").html("<option value=''>请选择城市</option>"); $("#district").html("<option value=''>请选择区县</option>"); if (province != "") { $.ajax({ type: "GET", url: "city.php", data: {"province": province}, success: function(data) { $("#city").append(data); } }); } }); // 城市选项改变时,加载区县列表 $("#city").change(function() { var province = $("#province").val(); var city = $(this).val(); $("#district").html("<option value=''>请选择区县</option>"); if (city != "") { $.ajax({ type: "GET", url: "district.php", data: {"province": province, "city": city}, success: function(data) { $("#district").append(data); } }); } }); }); ``` 在省份、城市、区县列表对应的php文件中,需要根据传入的参数返回对应的选项列表。例如,city.php文件可能如下所示: ```php $province = $_GET["province"]; echo "<option value=''>请选择城市</option>"; if ($province == "北京") { echo "<option value='北京市'>北京市</option>"; } else if ($province == "上海") { echo "<option value='上海市'>上海市</option>"; } else if ($province == "广东") { echo "<option value='广州市'>广州市</option>"; echo "<option value='深圳市'>深圳市</option>"; echo "<option value='珠海市'>珠海市</option>"; } ``` 类似地,district.php文件也需要根据传入的参数返回对应的选项列表。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值