ThinkPHP使用心得分享-ThinkPHP + Ajax 实现2级联动下拉菜单

  首先是数据库的设计。分类表叫cate.

  我做的是分类数据的二级联动,数据需要的字段有:id,name(中文名),pid(父id).

  父id的设置: 若数据没有上一级,则父id为0,若有上级,则父id为上一级的id。

  数据库有内容后,就可以开始写代码,进行二级联动的实现。

  先在后台php获取所有pid为0的数据,保存到$cate中,然后在第一层的<select>中用foreach循环输出。

  Html代码:

  

复制代码 代码如下:

  <select name="type" size="1" id="type">

  <option>请选择类型</option>

  <foreach name='cate' item='v'>

  <option value="{$v['ca_id']}">{$v.ca_name}</option>

  </foreach>

  </select>

  标签:

  <select name="lable" size="1" id="lables">

  </select>

  Ajax代码:

  

复制代码 代码如下:

  $('#type').click(function(){

  $(this).change(function(){

  var objectModel = {};

  var   value = $(this).val();

  var   type = $(this).attr('id');

  objectModel[type] =value;

  $.ajax({

  cache:false,

  type:"POST",

  url:site.web+"lable",

  dataType:"json",

  data:objectModel,

  timeout:30000,

  error:function(){

  alert(site.web+"lable");

  },

  success:function(data){

  $("#lables").empty();

  var count = data.length;

  var i = 0;

  var b="";

  for(i=0;i<count;i++){

  b+="<option value='"+data[i].ca_id+"'>"+data[i].ca_name+"</option>";

  }

  $("#lables").append(b);

  }

  });

  });

  }

  );

  Ajax代码在第一层类型改变后触发,ajax方法的主要参数有

  1.url:后台接收ajax的地址;

  2.data:传到后台的数据,一般用json传递;这里传递的是选中类的id值。

  3.type:传递方法,有get和post方法,我一般用post,可以传输的数据比get多,安全性也高些;

  4.error:ajax执行失败的方法;

  5.success:ajax执行成功的方法,也就是回调函数。这里在执行success时,我先用empty()清空了第二个下拉菜单的内容,然后再输出从后台获取的数据。

  下面是Thinkphp接收ajax数据并处理的页面

  

复制代码 代码如下:

  //后台ajax验证

  $result = array();

  $cate =$_POST['type'];

  $result = M('cate')->where(array('ca_pid'=> $cate))->field('ca_id,ca_name')->select();

  $this->ajaxReturn($result,"JSON");

  Thinkphp的I()方法其实可以看成$_POST[],这样来获取ajax传递过来的第一层选中内容的id,接着,获取其子类,然后用ajaxReturn()返回给ajax,这里设置了返回数据以json形式,所以ajax会以json形式接收到数据

  原生php的返回数据方式:

  

复制代码 代码如下:

  //搜索结果为$result

  .....

  echo json_encode($result);

  这样就完成了2级联动下拉菜单的实现,需要注意的是,url得保证正确,后台接收到也需要有返回值,不然ajax也不会执行success方法的。