一个强健 实用的asp+ajax二级联动菜单(有演示和附源程序打包下载)

一个强健 实用的ajax二级联动菜单(有演示和附源程序打包下载)

  

前些天在搞后台的时候要用到二级联动的菜单,到网上去找了半天也没找到满意的,不是这错就是那错,在选择的时候有时候不能返回.真是郁闷.

  后来就看到有人用ajax写了无限级分类(牛,呵呵,本人看不懂.).就想到我那个后台不也可以用ajax试试,虽然比用javascript的慢点,但我这个实用.强健..不会出错,也不会选择某个大类后再返回无选择状态小类为空的状态.呵呵.

  文件目录:如图

一个强健 实用的asp+ajax二级联动菜单(有演示和附源程序打包下载)

主要代码如下:

  index.asp

  

复制代码 代码如下:

  <%@LANGUAGE="VBSCRIPT" CODEPAGE="936"%>

  <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

  <html xmlns="http://www.w3.org/1999/xhtml">

  <head>

  <meta http-equiv="Content-Type" c />

  <title>Ajax的二级联动by啊峰</title>

  <script language="javascript" src="js.js"></script>

  </head>

  <body>

  <h2><a href="http://yeahdown.com/">Ajax的二级联动by啊峰</a></h2>

  <!--#include file="iconn.asp"-->

  <%

  Set afeng = Conn.Execute("select bigclassid,bigclassname from bigclass")

  %>

  <form id="form1" name="form1" method="post" action="">

  <div id="bigclass" style="float:left">

  <select name="select" >

  <option value="0">选择一级分类</option>

  <%If Not afeng.Eof then

  Do While Not afeng.Eof

  bigclassid= afeng("bigclassid")

  bigclassname = afeng("bigclassname")%>

  <option value="<%=bigclassid%>"><%=bigclassname%></option>

  <%afeng.Movenext

  Loop

  End If

  afeng.Close

  Set afeng = Nothing

  Conn.Close

  Set Conn = Nothing%>

  </select>

  </div>

  <div id="subclass"  style="float:left"><select name="select2">

  <option value="0">选择二级分类</option>

  </select>

  </div>

  </form>

  </body>

  </html>

  getsubcategory.asp文件:

  

复制代码 代码如下:

  <%

  Response.Charset="GB2312" '设置字符集 原默认为utf-8

  bigclassid=safe(request.QueryString("bigclassid")) '非法字符过滤

  If bigclassid<>"" Then

  Set Re=New RegExp

  Re.IgnoreCase=true

  Re.Global=false

  Re.Pattern = "^[0-9]{1,3}$"

  If Not Re.Test(bigclassid) Then

  Response.Write "非法参数"

  Response.End

  End If%>

  <!--#include file="iconn.asp"-->

  <%On error Resume Next

  set p = conn.execute("select * from smallclass where bigclassid="&bigclassid&"")

  If Err Then

  Err.Clear

  Response.Write "查询出错"

  Response.End

  End If

  If Not p.Eof Then

  html = "<select name='smallclassid'>"&vbnewline

  Do While Not p.Eof

  html = html&"<option value='"&p("smallclassid")&"'>"&p("smallclassname")&"</option>"&vbnewline

  p.Movenext

  Loop

  html = html&"</select>"

  Else

  html = "<select name='smallclassid'><option value='0' selected>暂无小类</option></select>"

  End If

  p.Close

  Set p = Nothing

  Conn.Close

  Set Conn = Nothing

  Response.write html

  html = ""

  End If

  %>

  iconn.asp文件:

  

复制代码 代码如下:

  <%

  Set conn=server.CreateObject("adodb.connection")

  db = "$#yeahdown.com@$$$@@%%.asp"

  C & Server.MapPath(db)

  On Error Resume Next

  conn.open ConnStr

  If Err Then

  Err.Clear

  Response.Write "<div id=""error"">连接数据库出错</div>"

  Response.End

  End If

  Function safe(Str)

  If Isnull(Str) Then

  safe = ""

  Exit Function

  End If

  Str = Replace(Str,Chr(0),"", 1, -1, 1)

  Str = Replace(Str, """", """, 1, -1, 1)

  Str = Replace(Str,"<","<", 1, -1, 1)

  Str = Replace(Str,">",">", 1, -1, 1)

  Str = Replace(Str, "script", "script", 1, -1, 0)

  Str = Replace(Str, "SCRIPT", "SCRIPT", 1, -1, 0)

  Str = Replace(Str, "Script", "Script", 1, -1, 0)

  Str = Replace(Str, "script", "Script", 1, -1, 1)

  Str = Replace(Str, "object", "object", 1, -1, 0)

  Str = Replace(Str, "OBJECT", "OBJECT", 1, -1, 0)

  Str = Replace(Str, "Object", "Object", 1, -1, 0)

  Str = Replace(Str, "object", "Object", 1, -1, 1)

  Str = Replace(Str, "applet", "applet", 1, -1, 0)

  Str = Replace(Str, "APPLET", "APPLET", 1, -1, 0)

  Str = Replace(Str, "Applet", "Applet", 1, -1, 0)

  Str = Replace(Str, "applet", "Applet", 1, -1, 1)

  Str = Replace(Str, "[", "[")

  Str = Replace(Str, "]", "]")

  Str = Replace(Str, """", "", 1, -1, 1)

  Str = Replace(Str, "=", "=", 1, -1, 1)

  Str = Replace(Str, "'", "''", 1, -1, 1)

  Str = Replace(Str, "select", "select", 1, -1, 1)

  Str = Replace(Str, "execute", "execute", 1, -1, 1)

  Str = Replace(Str, "exec", "exec", 1, -1, 1)

  Str = Replace(Str, "join", "join", 1, -1, 1)

  Str = Replace(Str, "union", "union", 1, -1, 1)

  Str = Replace(Str, "where", "where", 1, -1, 1)

  Str = Replace(Str, "insert", "insert", 1, -1, 1)

  Str = Replace(Str, "delete", "delete", 1, -1, 1)

  Str = Replace(Str, "update", "update", 1, -1, 1)

  Str = Replace(Str, "like", "like", 1, -1, 1)

  Str = Replace(Str, "drop", "drop", 1, -1, 1)

  Str = Replace(Str, "create", "create", 1, -1, 1)

  Str = Replace(Str, "rename", "rename", 1, -1, 1)

  Str = Replace(Str, "count", "count", 1, -1, 1)

  Str = Replace(Str, "chr", "chr", 1, -1, 1)

  Str = Replace(Str, "mid", "mid", 1, -1, 1)

  Str = Replace(Str, "truncate", "truncate", 1, -1, 1)

  Str = Replace(Str, "nchar", "nchar", 1, -1, 1)

  Str = Replace(Str, "char", "char", 1, -1, 1)

  Str = Replace(Str, "alter", "alter", 1, -1, 1)

  Str = Replace(Str, "cast", "cast", 1, -1, 1)

  Str = Replace(Str, "exists", "exists", 1, -1, 1)

  Str = Replace(Str,Chr(13),"<br>", 1, -1, 1)

  safe = Replace(Str,"'","''", 1, -1, 1)

  End Function

  %>

  最后一个js.js

  

复制代码 代码如下:

  function createxmlhttp()

  {

  xmlhttpobj = false;

  try{//创建对象,一个一个的试,哎,要是能统一标准都好。。

  xmlhttpobj = new XMLHttpRequest;

  }catch(e){

  try{

  xmlhttpobj=new ActiveXObject("MSXML2.XMLHTTP");

  }catch(e2){

  try{

  xmlhttpobj=new ActiveXObject("Microsoft.XMLHTTP");

  }catch(e3){

  xmlhttpobj = false;

  }

  }

  }

  return xmlhttpobj;

  }

  function getsubcategory(bigclassid){

  if(bigclassid==0){

  document.getElementById("subclass").innerHTML="<select name='smallclassid'><option value='0' selected>选择二级分类</option></select>";

  return;

  };

  var xmlhttpobj = createxmlhttp();

  if(xmlhttpobj){//如果创建对象xmlhttpobj成功

  xmlhttpobj.open('get',"getsubcategory.asp?bigclassid="+bigclassid+"&number="+Math.random(),true);//get方法 加个随机数。

  xmlhttpobj.send(null);

  xmlhttpobj.onreadystatechange=function(){//客户端监控函数

  if(xmlhttpobj.readystate==4){//服务器处理请求完成

  if(xmlhttpobj.status==200){

  //alert('ok');

  var html = xmlhttpobj.responseText;//获得返回值

  document.getElementById("subclass").innerHTML=html;

  }else{

  document.getElementById("subclass").innerHTML="对不起,您请求的页面有问题...";

  }

  }else{

  document.getElementById("subclass").innerHTML="加载中,请梢候...";//服务器处理中

  }

  }

  }

  }

  打包文件下载