网络编程
位置:首页>> 网络编程>> Asp编程>> asp+ajax版四级联动菜单(数据库)

asp+ajax版四级联动菜单(数据库)

  发布时间:2009-07-03 15:40:00 

标签:四级,琥珀,联动,菜单

ajax.html

 

<html>
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=gb2312">
    <meta content="琥珀[hopesoft],http://www.10090.com" name="author">
    <title>四级联动菜单[AJAX版]</title>
    <style type="text/css">
      body, td
      {
        font-family: 宋体;
        font-size: 12px;
      }
      </style>
<script language="JavaScript">
if (window.XMLHttpRequest) 
{ // Mozilla, Safari, ...
    http_request = new XMLHttpRequest();

else if (window.ActiveXObject) 
{ // IE
    http_request = new ActiveXObject("Microsoft.XMLHTTP");
}
//定义菜单级数,菜单ID数组,菜单对应字段数组
var MenuIdArr,MenuFieldArr,MenuClass;
MenuIdArr= new Array();
MenuFieldArr=new Array();
MenuClass=4;

MenuIdArr[1]="sel1";//下拉框名称
MenuIdArr[2]="sel2";
MenuIdArr[3]="sel3";
MenuIdArr[4]="sel4";

MenuFieldArr[1]="name" ;//字段名称;
MenuFieldArr[2]="name";
MenuFieldArr[3]="name";
MenuFieldArr[4]="name" ;
function GetResult(str,classid)
{
/*
*--------------- GetResult(str,classid) -----------------
* GetResult(str) 
* 功能:通过XMLHTTP发送请求,返回结果.
* 参数:str,字符串,发送条件;classid,数字,菜单级别
* 实例:GetResult(document.all.userid.value,1);
*--------------- GetResult(str,classid) -----------------
*/



var linkurl="ajax_server.asp?classid="+classid+"&sel="+str+"&fieldname="+MenuFieldArr[classid+1]
//alert(linkurl);
http_request.open("GET",linkurl,false);
http_request.onreadystatechange =function(){UpdateMenu(http_request,classid)}; 
http_request.send(null);
}
//服务器端处理返回的是经过escape编码的字符串.
//在页面显示服务器查询结果
//var returntxt=unescape(http_request.responseText);
function UpdateMenu(http_request,classid) //回调函数

////Http就绪状态完成
//0:请求没有发出(在调用 open() 之前)。 
//
//  1:请求已经建立但还没有发出(调用 send() 之前)。 
//
//  2:请求已经发出正在处理之中(这里通常可以从响应得到内容头部)。 
//
//  3:请求已经处理,响应中通常有部分数据可用,但是服务器还没有完成响应。 
//
//  4:响应已完成,可以访问服务器响应并使用它。
if (http_request.readyState == 4) 
{  
    if (http_request.status == 200)// 检查 HTTP 状态。我们期望的状态码是 200,它表示一切顺利

       {
      var returntxt=unescape(http_request.responseText);
      if(returntxt.length>0)
      {
       document.all,ajax.innerHTML="服务器返回结果:<font color='red'>"+returntxt+"</font>     [By Shmily QQ:<a href=tencent://message/?uin=362113452&Site=renyis&Menu=yes>362113452</a>]"
      }
      else
      {
       document.all,ajax.innerHTML=""
      }
    //通过XMLHTTP返回数据,开始构建Select.
    //BuildSel(returntxt,eval("document.all."+MenuIdArr[classid+1]))
      BuildSel(returntxt,document.getElementById(MenuIdArr[classid+1]))
  
    //============更改下下级以下菜单为空==============
      var kkk
      for(kkk=classid+2;kkk<=MenuClass;kkk++)
       {  
       submenu=document.getElementById(MenuIdArr[kkk]) 
       submenu.length=1
       submenu.options[0].selected=true
       }
      }
     }
}

function BuildSel(str,sel)
{
/*
*--------------- BuildSel(str,sel) -----------------
* BuildSel(str,sel) 
* 功能:通过str构建Select.
* 参数:str,字符串,由服务端返回的.有特定结构"字符串1ws,字符串2,字符串3"
*            也可为"字符串1序号ws字符串1文本,字符串2序号ws字符串2文本,字符串3序号ws字符串3文本",如本例
* 参数:sel,要构建的Select
* 实例:BuildSel(unescape(oBao.responseText),document.all.sel2)
*--------------- BuildSel(str,sel) -----------------
*/
sel.options.length=0;//先清空原来的数据.

var arrstr = new Array();
arrstr = str.split(",");
//开始构建新的Select.
sel.options.add(new Option( "-----请选择-----",""));  
if(str.length>0)   
{
for(var i=0;i<arrstr.length;i++)
{ //分割字符串
    var subarrstr=new Array;
    subarrstr=arrstr[i].split("ws");
    //生成下级菜单
    sel.options.add(new Option(subarrstr[1],subarrstr[0])); 
}
sel.options[0].selected=true
}

}
    </script>
    </head>
    <body>
     <form name="form1" method="post" action="">
      <table width="90%" border="0" align="center" cellpadding="2" cellspacing="1" bgcolor="#CCCCCC">
       <tr bgcolor="F1F1F1">
        <td height="24" colspan="2" align="center">AJAX四级联动菜单</td>
       </tr>
       <tr bgcolor="#FFFFFF">
        <td width="12%" height="24" align="center">所 在 洲:</td>
        <td><select name="sel1" id="sel1" onChange="GetResult(this.value,1)">
          <option value="" selected>-----请选择-----</option>
          <option value="10">亚洲</option>
          <option value="11">欧洲</option>
         </select></td>
       </tr>
       <tr bgcolor="#FFFFFF">
        <td height="24" align="center">国 家:</td>
        <td><select name="sel2" id="sel2" onChange="GetResult(this.value,2)">
          <option value="" selected>-----请选择-----</option>
         </select></td>
       </tr>
       <tr bgcolor="#FFFFFF">
        <td height="24" align="center">城 市:</td>
        <td><select name="sel3" id="sel3" onChange="GetResult(this.value,3)">
          <option value="" selected>-----请选择-----</option>
         </select></td>
       </tr>
       <tr bgcolor="#FFFFFF">
        <td height="24" align="center">地 区:</td>
        <td><select name="sel4" id="sel4">
          <option value="" selected>-----请选择-----</option>
         </select></td>
       </tr>
       <tr bgcolor="F1F1F1">
        <td height="24" colspan="2" align="center" id="ajax"></td>
       </tr>
      </table>       
      <script language="javascript"> GetResult(document.getElementById("sel1").value,1)        
      </script>
     </form>
    </body>
</html>

ajax_server.asp

<% @Language="JavaScript" %>
<%
function OpenDB(sdbname)
{
/*
*--------------- OpenDB(sdbname) -----------------
* OpenDB(sdbname) 
* 功能:打开数据库sdbname,返回conn对象.
* 参数:sdbname,字符串,数据库名称.
* 实例:var conn = OpenDB("database.mdb");
*--------------- OpenDB(sdbname) -----------------
*/
var connstr = "Provider=Microsoft.Jet.OLEDB.4.0; Data Source="+Server.MapPath(sdbname);
var conn = Server.CreateObject("ADODB.Connection");
conn.Open(connstr);
return conn;
}
var oConn = OpenDB("ajax_data.mdb");
var sel = Request("sel");//菜单值
var classid = Request("classid") //菜单级别
var fieldname = Request("fieldname")//字段地名
var arrResult = new Array();
//var sql = "select "+fieldname+" from Demo where parentid='"+sel+"' and classid="+classid;
var sql = "select id,"+fieldname+" from Demo where parentid='"+sel+"'";
//Response.Write("alert("+sql+")")
var rs = Server.CreateObject("ADODB.Recordset");
rs.Open(sql,oConn,1,1);
while(!rs.EOF)
{
//遍历所有适合的数据放入arrResult数组中.
arrResult[arrResult.length] = rs(0).Value+"ws"+rs(1).Value;
rs.MoveNext();
}
//escape解决了XMLHTTP。中文处理的问题.

Response.Write(escape(arrResult.join(","))); //数组组合成字符串.由","字符串连接.

%>

ajax_data.mdb

表名:Demo

id自动编号

name文本

parentid文本

classid数字

0
投稿

猜你喜欢

手机版 网络编程 asp之家 www.aspxhome.com