二级联动下拉菜单,可以说是Ajax的经典应用了。
我们用一个根据地区选择学校的例子来说明。
二级联动下拉菜单
介绍一下要准备的文件,一共3个。
ajax_test.html:主要操作页面,在这里显示二级联动下拉菜单;
get_local.php:取得地区名称的后台页面,返回所有的地区名称;
get_school.php:取得学校名称的后台页面,接受地区名称和转码参数,返回该地区的学校名称。
数据库的结构:
表:school
字段:id,local,school
ajax_test.html
function get_school(){
//先判断浏览器类型,决定是否需要转码
if ($.browser.safari) {
trans="0";
}
if ($.browser.msie) {
trans="0";
}
if ($.browser.opera) {
trans="1";
}
if ($.browser.mozilla) {
trans="1";
}
local=$("#local").val();//取得地区名称
$("#school").empty();//清空学校名称
$("#school").append("");
$.ajax({
url:'get_school.php',
data:"local="+local+"&trans="+trans,//这里和上面不同,向页面传入了参数
type:'get',
dataType:'text',
success:function(schools)
{
$("#school").empty();
$("#school").append("");
$("#school").append(schools);
}
});
}
get_local();//自动启动读取地区程序
《script》
get_local.php:
header("Content-type: text/html;charset=gb2312");//输出编码,避免中文乱码
include ("const.php");//这里放的是连接数据库的所有参数,可根据情况自行编写
link_data();//连接数据库的函数,写在const.php里的
$sql="select local from school group by local order byhex(local)";
$result=
_query($sql);
//循环输出数据列
while($rows=mysql_fetch_array($result)){
$i++;
echo "
}
?>
get_school.php:
header("Content-type: text/html;charset=gb2312");//输出编码,避免中文乱码
$temp_local=$_GET[local];
$local=iconv("UTF-8","gb2312",$_GET[local]);//Firefox和Opera需要转码
$trans=iconv("UTF-8","gb2312",$_GET[trans]);//同上
$school=iconv("UTF-8","gb2312",$_GET[trans]);//同上
include ("const.php");
link_data();
if (($_GET[trans]=="1")) {
$sql="select school from school where local="".$local."" group byschool order by hex(school)";
} else if ($trans=="0"){
$sql="select school from school where local="".$temp_local.""group by school order by hex(school)";
}
$result=mysql_query($sql);
//循环输出数据列
$i=0;
while($rows=mysql_fetch_array($result)){
$i++;
if ($schoo==$rows[0]) {
echo "n";
} else {
echo "n";
}
}
?>
下面是我改的ASP版:
function get_SonClass(){
//先判断浏览器类型,决定是否需要转码
if ($.browser.safari) {
trans="0";
}
if ($.browser.msie) {
trans="0";
}
if ($.browser.opera) {
trans="1";
}
if ($.browser.mozilla) {
trans="1";
}
ClassID=$("#BigClassID").val();//一级类名
$("#SonClassID").empty();//清空二级类名
$("#SonClassID").append("
$.ajax({
url:'get_SonClass.asp',
data:"ClassID="+ClassID+"&trans="+trans,//这里和上面不同,向页面传入了参数
type:'get',
dataType:'text',
success:function(schools)
{
$("#SonClassID").empty();
$("#SonClassID").append("
$("#SonClassID").append(schools);
}
});
}
get_BigClass();//自动启动读取地区程序
《script》
get_SonClass.asp
<%
Response.Charset="gb2312"
SqlClass = "Select ClassID,ClassName,DefaultPicUrl FromItineraries_Class Where DeepTh = 0 Order By RootID Asc, RankingAsc"
Set RsClass = Conn.Execute(SqlClass)
if RsClass.bof and RsClass.bof then
else
do while not RsClass.eof
Response.Write "
RsClass.movenext
loop
end if
RsClass.Close
set RsClass=nothing
%>
get_SonClass.asp
<%
Response.Charset="gb2312"
ClassID=Request("ClassID")
trans=Request("trans")
SqlClass = "Select ClassID,ClassName,DefaultPicUrl FromItineraries_Class Where ParentID = "&ClassID&" Order ByRootID Asc, Ranking Asc"
Set RsClass = Conn.Execute(SqlClass)
if RsClass.bof and RsClass.bof then
else
do while not RsClass.eof
Response.Write "
RsClass.movenext
loop
end if
RsClass.Close
set RsClass=nothing
%>