jQuery+PHP+MySQL实现二级联动下拉菜单

2010年12月06日 12:43helloweba.com 作者:月光光 标签:jQuery  PHP  MySQL  JSON 

二级联动下拉菜单选择应用在在很多地方,比如说省市下拉联动,商品大小类下拉选择联动。本文将通过实例讲解使用jQuery+PHP+MySQL来实现大小分类二级下拉联动效果。

先看下效果

实现的效果就是当选择大类时,小类下拉框里的选项内容也随着改变。实现原理:根据大类的值,通过jQuery把值传给后台PHP处理,PHP通过查询MySQl数据库,得到相应的小类,并返回JSON数据给前端处理。

XHTML

首先我们要建立两个下拉选择框,第一个是大类,第二个是小类。大类的值可以是预先写好,也可以是从数据库读取。

<label>大类:</label>
<select name="bigname" id="bigname">
   <option value="1">前端技术</option>
   <option value="2">程序开发</option>
   <option value="3">数据库</option>
</select>
<label>小类:</label>
<select name="smallname" id="smallname">
</select>

jQuery

先写一个函数,获取大类选择框的值,并通过$.getJSON方法传递给后台server.php,读取后台返回的JSON数据,并通过$.each方法遍历JSON数据,将对应的值写入一个option字符串,最后将option追加到小类里。

function getSelectVal(){
	$.getJSON("server.php",{bigname:$("#bigname").val()},function(json){
		var smallname = $("#smallname");
		$("option",smallname).remove(); //清空原有的选项
		$.each(json,function(index,array){
			var option = "<option value='"+array['id']+"'>"+array['title']+"</option>";
			smallname.append(option);
		});
	});
}

注意,在遍历JSON数据追加之前一定要先将小类里的原有的项清空。清空选项的方法有两种,一种是上文代码中提到,还有一种更简单直接的方法:

smallname.empty();

然后,在页面载入后执行调用函数:

$(function(){
	getSelectVal();
	$("#bigname").change(function(){
		getSelectVal();
	});
});

在页面初始的时候,下拉框是要设置选项的,所以在初始的时候就要调用getSelectVal(),而当大类选项改变时,也调用了getSelectVal()。

PHP

include_once("connect.php"); //链接数据库

$bigid = $_GET["bigname"];
if(isset($bigid)){
    $q=mysql_query("select * from catalog where cid = $bigid");
	while($row=mysql_fetch_array($q)){
		$select[] = array("id"=>$row[id],"title"=>$row[title]);
	}
	echo json_encode($select);
}

根据jQuery传递过来的大类的value值,构造SQL语句查询分类表,最终输出JSON数据。本站在未做特别说明的情况下所使用的PHP与MySQL连接,和查询语句等均使用原始语句方法如mysql_query等,目的就是为了让读者能够直观的知晓数据的传输查询。

最后附上MYSQL表结构:

CREATE TABLE `catalog` (
  `id` mediumint(6) NOT NULL auto_increment,
  `cid` mediumint(6) NOT NULL default '0',
  `title` varchar(50) NOT NULL,
  PRIMARY KEY  (`id`)
) ENGINE=MyISAM  DEFAULT CHARSET=utf8;
声明:本文为原创文章,helloweba.net和作者拥有版权,如需转载,请注明来源于helloweba.net并保留原文链接:https://www.helloweba.net/javascript/88.html

30条评论

  • 在与后台交互时,一直在提示 $bigid = $_GET["bigname"]; 未定义,,这是为什么啊?

  • 取的是value 1、2、3,,整型的,不是字符串,不需要拼接上单引号

  • $q=mysql_query("select * from catalog where cid ='".$bigid."'");
    SQL查询语句 LZ可能打快了 没有字符串拼接 感谢楼主的分享 解决了我的难题

  • 为什么小类里面有中文就不能传递了呢?

  • 不错,谢谢贡献。

  • 我的小类没有显示,能否指导一下,本人新手。[挤眼]

  • 我的小类也没显示啊,为什么。[泪]

  • 学习中,能将,完整的 代码 各个文件 贴出来吗?

  • 写的很不错。。

  • 楼主啊!请问你数据库表什么怎么创建的?

  • 在iphone下怎么是失效的

  • 不行啊

  • 很好,我找了很久,不过提个建议,发布代码最好支持用户也可以提供代码分享

  • 呵呵,现在没这个问题啦。可能是IE缓存或网速慢导致的,不过$.getJSON()会带来一些麻烦。比如我想获取小类的value,就有有获取不到的情况。后面我用$.ajax解决了[给力]

  • IE7、IE8下,小类不显示。看来不兼容

  • 呵呵,现在没这个问题啦。可能是IE缓存或网速慢导致的,不过$.getJSON()会带来一些麻烦。比如我想获取小类的value,就有有获取不到的情况。后面我用$.ajax解决了[给力]

  • IE7、IE8下,小类不显示。看来不兼容

  • 谢谢分享

  • 我做的小类也没显示。。。

  • connect.php的代码能上传下吗?