PHP+ajax二级联动下拉选择菜单,IE+Firefox浏览器支持
产品分类搜索和产品发布有二级甚至多级分类时,以及文章二级分类搜索和后台发布时候,都能用到二级分类无刷新下拉菜单选择。今天我们就用ajax和php从数据库中读取二级分类实现二级联动下拉选择菜单。
刚开始在网上找了一段代码,后来测试发现代码在FF(Firefox)下测试成功,但在IE下不成功(IE6.7.8均测试不成功),我们先看看这段代码:
ajax框架:<title>ajax2级联动菜单演示</title>
<script language="JavaScript">
<!--
var 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("Msxml2.XMLHttp");
}catch(e){
try{
http_request=new ActiveXobject("Microsoft.XMLHttp");
}catch(e){}
}
}
function send_request(url){
if(!http_request){
window.alert("创建XMLHttp对象失败!");
return false;
}
http_request.open("GET",url,true);
http_request.onreadystatechange=processrequest;
http_request.send(null);
}
//处理返回信息的函数
function processrequest(){
if(http_request.readyState==4){ //判断对象状态
if(http_request.status==200){ //信息已成功返回,开始处理信息
document.getElementById(reobj).innerHTML=http_request.responseText;
}
else{
alert("您所请求的页面不正常!");
}
}
}
function getclass(obj){
var pid=document.form1.select1.value;
document.getElementById(obj).innerHTML="<option>loading...</option>";
send_request("doclass.php?pid="+pid); reobj=obj;
}
//-->
</script>
</head>
HTML显示页面:
<?php include("conn/conn.php");?>
<form name="form1">
<select name="select1" id="class1" style="width:200;" onChange="getclass(’class2’);">
<option selected="selected">请选择大类</option>
<?php
$sql="select* from tb_type where parentid=0";
$result=mysql_query($sql);
//循环列出选项
while($rows=mysql_fetch_array($result)){
?>
<option value=<?php echo $rows[’id’]; ?>><?php echo $rows[’typename’];?></option>
<?php } ?>
</select>
<select name="select2" style="width:300;">
</select>
</form>
PHP后台doclass.php:
<?php
include("conn/conn.php");.
$pid=$_GET[’pid’];
$sql="select * from tb_type where parentid=".$pid."";
$result=mysql_query($sql);
//循环列出选项
while($rows=mysql_fetch_array($result)){
$typename = gbkToUtf8($rows[’typename’]);
echo "<option value=".$rows[’id’].">".$typename."</option>";
} ?>
以上代码,经过多次测试都不成功,最后修改以下几处IE测试通过:
1. reobj必须定义为全局变量 var reobj;
2. 赋值reobj=obj; 放到send_request()上面;
3. ie里不能用innerHTML更新select, IE浏览器下select元素不支持innerHTML,返回ajax可以连 <select>标签一起返回,即在外面再套一个div,或者用outerHTML更新 document.getElementById(reobj).outerHTML=http_request.responseText;,但是 Firefox又不支持outerHTML。因此采用外套div的方法较好。
最后代码修改如下,IE和Firefox测试均通过:
<title>ajax2级联动菜单演示</title>
<script language="JavaScript">
<!--
var reobj = null;
var 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("Msxml2.XMLHttp");
}catch(e){
try{
http_request=new ActiveXobject("Microsoft.XMLHttp");
}catch(e){}
}
}
function send_request(url){
if(!http_request){
window.alert("创建XMLHttp对象失败!");
return false;
}
http_request.open("GET",url,true);
http_request.onreadystatechange=processrequest;
http_request.send(null);
}
//处理返回信息的函数
function processrequest(){
if(http_request.readyState==4){ //判断对象状态
if(http_request.status==200){ //信息已成功返回,开始处理信息
document.getElementById(reobj).innerHTML=http_request.responseText;
}
else{
alert("您所请求的页面不正常!");
}
}
}
function getclass(obj){
var pid=document.form1.select1.value;
document.getElementById(obj).innerHTML="<option>loading...</option>";
reobj=obj;
send_request("doclass.php?pid="+pid);
}
//-->
</script>
</head>
<body>
<?php include("conn/conn.php");?>
<form name="form1">
<select name="select1" id="class1" style="width:200;" onChange="getclass(’class2’);">
<option selected="selected">请选择大类</option>
<?php
$sql="select* from tb_type where parentid=0";
$result=mysql_query($sql);
//循环列出选项
while($rows=mysql_fetch_array($result)){
?>
<option value=<?php echo $rows[’id’]; ?>><?php echo $rows[’typename’];?></option>
<?php } ?>
</select>
<div id="class2">
</div>
</form>
</body>
doclass.php: <?php
include("conn/conn.php");
function gbkToUtf8 ($value) {
return iconv("gbk","UTF-8", $value);
}
//ajax采用utf编码,从数据库获得的中文字符为gbk编码,iconv函数将从数据库取得的中文字符先编码为utf-8,
//再交给ajax处理echo输出,解决显示ajax乱码问题.
$pid=$_GET[’pid’];
$sql="select * from tb_type where parentid=".$pid."";
$result=mysql_query($sql);
?>
<select name="select2" style="width:300;">
<?php
//循环列出选项
while($rows=mysql_fetch_array($result)){
$typename = gbkToUtf8($rows[’typename’]);
echo "<option value=".$rows[’id’].">".$typename."</option>";
} ?>
</select>
轉自 http://www.bokee.net/bloggermodule/blog_viewblog.do?id=4194076
還沒測試...
分享到:
相关推荐
Smarty + Ajax 下拉菜单二级联动: 1. 建立数据库ajaxtest (使用utf8) 2. 进行conn.php 修改root密码 3. 导入表 product.sql --- 主产品 4. 导入表 producttest.sql -- 二级产品 弄好后运行:...
在标题和描述中提到的支持"IE8和Firefox",意味着这个二级菜单的实现考虑了这两款浏览器的历史版本。IE8是Internet Explorer系列的一个较旧版本,对于前端开发者来说,它常常是兼容性挑战的一部分,因为它对某些现代...
7. **兼容性测试**:最后,测试是必不可少的,确保这个功能在各种主流浏览器(如Chrome、Firefox、Safari、Edge等)以及不同版本的JavaScript环境中都能正常运行。 在提供的`Test.html`文件中,可以具体查看代码...
标题 "JS + XML 联动菜单 支持IE、FireFox" 描述了一种使用JavaScript(JS)和XML技术实现的跨浏览器联动菜单。这种菜单通常在网页中用于下拉选择,例如省市县的选择,其中一项的选择会动态更新下一级菜单的内容。...
在这个项目中,Ajax负责在用户选择一级、二级、三级菜单时,向服务器发送请求获取四级联动的数据。 2. **三级联动与四级联动**:联动下拉菜单通常有多个级别,如这里的四级联动。用户在选择省份后,城市会根据省份...
此外,这个功能已经在IE, FIREFOX, CHROME等主流浏览器上进行了测试,确保了跨浏览器的兼容性。 总结来说,“jquery+ajax+json省市区三级联动”是一个高效、灵活的解决方案,它利用现代Web技术实现了地理信息的动态...
在本案例中,用户选择一级省份时,Ajax会向服务器发送请求,获取对应的二级城市数据,然后动态填充到下拉菜单中,无需完全加载新页面,提升了用户体验。 2. **三级联动菜单**:这是一种常见的前端交互设计,用户...
"这个例子我费了好大劲才调通"说明了开发者可能在处理这些问题时遇到了挑战,尤其是确保在IE和Firefox这样的主流浏览器上都能正常工作。"里面附有建表问题"可能指的是在数据库层面创建相关表格以存储级联数据。 ...
示例代码中提到了对 IE6 和 Firefox 的支持。这表明在编写 JavaScript 代码时需要注意浏览器兼容性问题。例如,在创建 XMLHttpRequest 对象时,不同的浏览器可能需要使用不同的方法来创建,因此需要进行适当的检查和...
, 用Jquery实现的三级联动下拉列表插件,压缩包内有多个不同的版本,其实现的基本原理大同小异,无非是调用方式的不同,第一个是通过读取XML构建,支持IE/firefox,chrome不支持,XML部分可以改成AJAX的方式,这样...
3. 兼容性:确保代码兼容主流浏览器,包括IE、Chrome、Firefox等。 4. 性能优化:对于大数据量的地区信息,可以考虑使用懒加载策略,只在用户滚动到相应区域时才加载相应的数据。 5. 可配置化:允许开发者通过配置...
本项目“Ajax n级联动数据库版(带后台和省市县数据库)”是一个专门针对多级联动下拉菜单实现的解决方案,特别适用于需要展示层级结构数据的场景,如中国的省市县三级联动选择。 一、Ajax n级联动原理 Ajax n级...
在网页开发中,"js省市区,3级联动下拉单"是一个常见的功能,用于实现用户选择省份、城市和区县的过程,这三个下拉菜单会根据用户的选择动态更新。这个功能通常应用于地址填写或者定位服务,能够提供方便的用户体验...
本案例的"省份城市二级联动JS"是用于创建一个动态的下拉菜单,用户首先选择省份,接着根据所选省份,系统会自动加载并显示该省份下的所有城市。这种功能通常应用于注册表单、订单填写页面以及需要精确地理位置信息的...
首先,原始的代码可能只支持Internet Explorer浏览器,但通过改进,我们可以让它在Firefox、Chrome等其他主流浏览器中也能正常工作。关键在于利用jQuery的事件监听和DOM操作功能。 1. **通过XML构建联动**: 在...
下拉菜单,三级联动 用Jquery实现的三级联动下拉列表插件,压缩包内有多个不同的版本,其实现的基本原理大同小异,无非是调用方式的不同,第一个是通过读取XML构建,支持IE/firefox,chrome不支持,XML部分可以改成...
例如,当一级菜单被选定,通过ASP发送AJAX请求到服务器,服务器执行SQL查询获取二级菜单的选项,然后返回JSON或XML数据,JavaScript函数再解析这些数据并填充到二级菜单中。 5. **跨浏览器测试**:确保在火狐浏览器...
9. **兼容性考虑**:虽然jQuery库已经做了很多浏览器兼容性的工作,但在实际应用中,仍需测试在主流浏览器(如Chrome、Firefox、Edge、Safari等)上的表现,确保在不同环境下都能正常工作。 10. **错误处理**:对于...
这种插件的核心是利用JavaScript(JS)动态更新下拉菜单选项,根据用户在一级菜单(通常是省份)的选择,自动加载对应的二级菜单(如城市)。在网页开发中,这种功能可以提高用户体验,减少不必要的页面刷新。 一、...