基于 Asp+Ajax 和数据库驱动的二级联动菜单, 需要的朋友可以参考下。
index.asp 页面代码
<!-#inclua arquivo = Conn.asp->
<%
Definir CMD = Conn.Execute (selecione BigClassid, BigClassName da BigClass)
tempid = cmd (bigclassid)
%>
<select name = menu onchange = getsUbcategory (this.value);>
<%
se não for cmd.eof então
faça enquanto não é cmd.eof
bigClassid = cmd (bigclassid)
bigclassName = cmd (bigclassName)
%>
<opção value = <%= bigclassid%>> <%= bigclassName%> </pption>
<%
cmd.movenext
laço
final se
cmd.close
Definir CMD = nada
%>
</leclect>
<div id = subclasse>
<select name = submenu>
<%
Definir CXD = Conn.Execute (Selecione * da SmallClass WHERE BIGCLASSID = & tempid)
se não for cxd.eof então
faça, embora não seja cxd.eof
SmallClassid = CXD (SmallClassid)
SmallclassName = CXD (SmallClassName)%>
<opção value = <%= smallclassid%>> <%= smallclassName%> </pption>
<%
cxd.movenext
laço
cxd.close
Definir CXD = nada
outro
html = <select name = 'smallclassid'> <opção value = '0' selecionado> 暂无小类 </pption> </leclect>
Response.Write html
final se
%>
</leclect>
</div>
Ajax.js 代码
// documento JavaScript
função createxmlHttp ()
{
xmlhttpobj = false;
tentar{
xmlhttpobj = novo xmlHttPrequest;
} catch (e) {
tentar{
xmlHttpobj = new ActiveXObject (msxml2.xmlHttp);
} catch (e2) {
tentar{
xmlHttpoBJ = new ActiveXObject (Microsoft.xmlHttp);
} catch (e3) {
xmlhttpobj = false;
}
}
}
retornar xmlhttpobj;
}
função getsubcategory (bigclassid) {
if (bigClassid == 0) {
document.getElementById (subclasse) .innerhtml = <select name = 'smallclassid'> <opção value = '0' selecionado> 选择二级分类 </pption> </leclect>;
retornar;
};
var xmlHttpobj = createxmlHttp ();
if (xmlHttpobj) {// 如果创建对象 xmlhttpobj 成功
xmlhttpobj.onreadyStateChange = Handle;
xmlhttpobj.open ('get', getSubcategory.asp? bigClassid =+bigClassid+& number =+math.random (), true); // obtenha 方法 加个随机数。
xmlhttpobj.send (nulo);
}
}
função handle () {// 客户端监控函数
//if(xmlhttpobj.readyState==4) {// 服务器处理请求完成
if (xmlhttpobj.status == 200) {
// alert ('ok');
var html = xmlHttpobj.ResponseText; // 获得返回值
document.getElementById (subclasse) .innerhtml = html;
}outro{
document.getElementById (subclasse) .innerhtml = 对不起 , 您请求的页面有问题 ...;
}
//}
//outro{
//document.getElementById(subclass).innerhtml=xmlhttpobj.readyState ;// 服务器处理中
//}
//}
}
getSubcategory.asp 代码
<%@idioma = vbscript codePage = 936%>
<!-#inclua arquivo = Conn.asp->
<%
Response.Charset = GB2312
bigClassid = seguro (request.QueryString (bigClassid))
Se BigClassid <> então
Definir Re = novo regexp
re.IGNORECASE = true
re.global = false
re.pattern = ^[0-9] {1,3} $
se não for.test (bigclassid), então
Response.Write 非法参数
resposta.END
final se%>
<%em erro de erro em seguida
set p = conn.execute (selecione * da classe pequena onde bigClassid = & bigClassid)
Se errar então
err.clear
Response.Write 查询出错
resposta.END
final se
Se não P.EOF então
html = <select name = 'Select2'> & vbNewline
Faça enquanto não é P.EOF
html = html & <opção value = '& p (smallclassid) &'> & p (smallclassName) & </pption> & vbNewline
P.Movenext
laço
html = html & </leclect>
outro
html = <select name = 'smallclassid'> <opção value = '0' selecionado> 暂无小类 </pption> </leclect>
final se
P.Close
Definir P = nada
Conn.Close
defina conn = nada
Response.Write html
html =
final se
%>