`
junesnow17
  • 浏览: 3869 次
  • 性别: Icon_minigender_2
  • 来自: 龍泉
最近访客 更多访客>>
文章分类
社区版块
存档分类
最新评论

PHP+ajax二级联动下拉选择菜单,IE+Firefox浏览器支持

阅读更多
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 下拉框二级联动

    Smarty + Ajax 下拉菜单二级联动: 1. 建立数据库ajaxtest (使用utf8) 2. 进行conn.php 修改root密码 3. 导入表 product.sql --- 主产品 4. 导入表 producttest.sql -- 二级产品 弄好后运行:...

    省市联动的二级菜单,支持IE8和firefox

    在标题和描述中提到的支持"IE8和Firefox",意味着这个二级菜单的实现考虑了这两款浏览器的历史版本。IE8是Internet Explorer系列的一个较旧版本,对于前端开发者来说,它常常是兼容性挑战的一部分,因为它对某些现代...

    二级联动(二个下拉列表关联)

    7. **兼容性测试**:最后,测试是必不可少的,确保这个功能在各种主流浏览器(如Chrome、Firefox、Safari、Edge等)以及不同版本的JavaScript环境中都能正常运行。 在提供的`Test.html`文件中,可以具体查看代码...

    JS + XML 联动菜单 支持IE、FireFox

    标题 "JS + XML 联动菜单 支持IE、FireFox" 描述了一种使用JavaScript(JS)和XML技术实现的跨浏览器联动菜单。这种菜单通常在网页中用于下拉选择,例如省市县的选择,其中一项的选择会动态更新下一级菜单的内容。...

    Ajax四级联动,兼容火狐,可扩展至无限级联动

    在这个项目中,Ajax负责在用户选择一级、二级、三级菜单时,向服务器发送请求获取四级联动的数据。 2. **三级联动与四级联动**:联动下拉菜单通常有多个级别,如这里的四级联动。用户在选择省份后,城市会根据省份...

    jquery+ajax+json省市区三级联动

    此外,这个功能已经在IE, FIREFOX, CHROME等主流浏览器上进行了测试,确保了跨浏览器的兼容性。 总结来说,“jquery+ajax+json省市区三级联动”是一个高效、灵活的解决方案,它利用现代Web技术实现了地理信息的动态...

    Ajax省市三级联动菜单支持火狐浏览器

    在本案例中,用户选择一级省份时,Ajax会向服务器发送请求,获取对应的二级城市数据,然后动态填充到下拉菜单中,无需完全加载新页面,提升了用户体验。 2. **三级联动菜单**:这是一种常见的前端交互设计,用户...

    Asp.net二级下拉框无刷新联动

    "这个例子我费了好大劲才调通"说明了开发者可能在处理这些问题时遇到了挑战,尤其是确保在IE和Firefox这样的主流浏览器上都能正常工作。"里面附有建表问题"可能指的是在数据库层面创建相关表格以存储级联数据。 ...

    JavaScript 二级联动下拉列表

    示例代码中提到了对 IE6 和 Firefox 的支持。这表明在编写 JavaScript 代码时需要注意浏览器兼容性问题。例如,在创建 XMLHttpRequest 对象时,不同的浏览器可能需要使用不同的方法来创建,因此需要进行适当的检查和...

    jquery 通用三级联动下拉列表.rar

    , 用Jquery实现的三级联动下拉列表插件,压缩包内有多个不同的版本,其实现的基本原理大同小异,无非是调用方式的不同,第一个是通过读取XML构建,支持IE/firefox,chrome不支持,XML部分可以改成AJAX的方式,这样...

    无刷新 省市县三级联动下拉列表

    3. 兼容性:确保代码兼容主流浏览器,包括IE、Chrome、Firefox等。 4. 性能优化:对于大数据量的地区信息,可以考虑使用懒加载策略,只在用户滚动到相应区域时才加载相应的数据。 5. 可配置化:允许开发者通过配置...

    ajax n级联动数据库版(带后台和省市县数据库)

    本项目“Ajax n级联动数据库版(带后台和省市县数据库)”是一个专门针对多级联动下拉菜单实现的解决方案,特别适用于需要展示层级结构数据的场景,如中国的省市县三级联动选择。 一、Ajax n级联动原理 Ajax n级...

    js省市区,3级联动下拉单

    在网页开发中,"js省市区,3级联动下拉单"是一个常见的功能,用于实现用户选择省份、城市和区县的过程,这三个下拉菜单会根据用户的选择动态更新。这个功能通常应用于地址填写或者定位服务,能够提供方便的用户体验...

    省份城市二级联动JS

    本案例的"省份城市二级联动JS"是用于创建一个动态的下拉菜单,用户首先选择省份,接着根据所选省份,系统会自动加载并显示该省份下的所有城市。这种功能通常应用于注册表单、订单填写页面以及需要精确地理位置信息的...

    jquery+json 通用三级联动下拉列表

    首先,原始的代码可能只支持Internet Explorer浏览器,但通过改进,我们可以让它在Firefox、Chrome等其他主流浏览器中也能正常工作。关键在于利用jQuery的事件监听和DOM操作功能。 1. **通过XML构建联动**: 在...

    jQuery 通用三级下拉联动菜单插件增强版

    下拉菜单,三级联动 用Jquery实现的三级联动下拉列表插件,压缩包内有多个不同的版本,其实现的基本原理大同小异,无非是调用方式的不同,第一个是通过读取XML构建,支持IE/firefox,chrome不支持,XML部分可以改成...

    asp支持火狐的三级联动

    例如,当一级菜单被选定,通过ASP发送AJAX请求到服务器,服务器执行SQL查询获取二级菜单的选项,然后返回JSON或XML数据,JavaScript函数再解析这些数据并填充到二级菜单中。 5. **跨浏览器测试**:确保在火狐浏览器...

    二级省市联动框架

    9. **兼容性考虑**:虽然jQuery库已经做了很多浏览器兼容性的工作,但在实际应用中,仍需测试在主流浏览器(如Chrome、Firefox、Edge、Safari等)上的表现,确保在不同环境下都能正常工作。 10. **错误处理**:对于...

    最新js实现全国二级联动地址插件

    这种插件的核心是利用JavaScript(JS)动态更新下拉菜单选项,根据用户在一级菜单(通常是省份)的选择,自动加载对应的二级菜单(如城市)。在网页开发中,这种功能可以提高用户体验,减少不必要的页面刷新。 一、...

Global site tag (gtag.js) - Google Analytics