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


Posted in PHP onMay 15, 2014

首先是数据库的设计。分类表叫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方法的。

PHP 相关文章推荐
PHP脚本的10个技巧(2)
Oct 09 PHP
PHP新手上路(四)
Oct 09 PHP
浅谈PHP 闭包特性在实际应用中的问题
Oct 30 PHP
php下连接ftp实现文件的上传、下载、删除文件实例代码
Jun 03 PHP
PHP正确配置mysql(apache环境)
Aug 28 PHP
ThinkPHP之用户注册登录留言完整实例
Jul 22 PHP
PHP中通过trigger_error触发PHP错误示例
Jun 23 PHP
表单提交错误后返回内容消失问题的解决方法(PHP网站)
Oct 20 PHP
PHP explode()函数的几个应用和implode()函数有什么区别
Nov 05 PHP
Yii控制器中操作视图js的方法
Jul 04 PHP
thinkphp多表查询两表有重复相同字段的完美解决方法
Sep 22 PHP
PHP常见数组排序方法小结
Aug 20 PHP
ThinkPHP使用心得分享-上传类UploadFile的使用
May 15 #PHP
ThinkPHP使用心得分享-分页类Page的用法
May 15 #PHP
php自定义函数截取汉字长度
May 15 #PHP
php获取服务器端mac和客户端mac的地址支持WIN/LINUX
May 15 #PHP
php小技巧之过滤ascii控制字符
May 14 #PHP
PHP 之 写时复制介绍(Copy On Write)
May 13 #PHP
PHP中copy on write写时复制机制介绍
May 13 #PHP
You might like
php采集速度探究总结(原创)
2008/04/18 PHP
php文件上传的例子及参数详解
2013/12/12 PHP
php查找字符串中第一个非0的位置截取
2017/02/27 PHP
PHP大文件及断点续传下载实现代码
2020/08/18 PHP
学习ExtJS(二) Button常用方法
2009/10/07 Javascript
基于jQuery的弹出框插件
2012/03/18 Javascript
判断日期是否能跨月查询的js代码
2014/07/25 Javascript
JavaScript的Date()方法使用详解
2015/06/09 Javascript
老生常谈javascript的类型转换
2016/10/12 Javascript
微信小程序 购物车简单实例
2016/10/24 Javascript
webpack源码之loader机制详解
2018/04/06 Javascript
详解Angular如何正确的操作DOM
2018/07/06 Javascript
解决nuxt页面中mounted、created、watch执行两遍的问题
2020/11/05 Javascript
详解JavaScript原型与原型链
2020/11/16 Javascript
[03:05]《我与DAC》之xiao8:DAC与BG
2018/03/27 DOTA
[32:07]完美世界DOTA2联赛PWL S3 LBZS vs Rebirth 第一场 12.16
2020/12/17 DOTA
Python黑帽编程 3.4 跨越VLAN详解
2016/09/28 Python
Python使用Matplotlib模块时坐标轴标题中文及各种特殊符号显示方法
2018/05/04 Python
解决python 未发现数据源名称并且未指定默认驱动程序的问题
2018/12/07 Python
远程部署工具Fabric详解(支持Python3)
2019/07/04 Python
python celery分布式任务队列的使用详解
2019/07/08 Python
Window10下python3.7 安装与卸载教程图解
2019/09/30 Python
利用Tensorboard绘制网络识别准确率和loss曲线实例
2020/02/15 Python
浅析NumPy 切片和索引
2020/09/02 Python
Python 使用SFTP和FTP实现对服务器的文件下载功能
2020/12/17 Python
css3利用transform变形结合事件完成扇形导航
2020/10/26 HTML / CSS
处理textarea中的换行和空格
2019/12/12 HTML / CSS
Html5 Canvas实现图片标记、缩放、移动和保存历史状态功能 (附转换公式)
2020/03/18 HTML / CSS
世界领先的26岁以下学生和青少年旅行预订网站:StudentUniverse
2018/07/01 全球购物
Richards网上商店:当代时尚,遍布巴西
2019/11/03 全球购物
货物运输服务质量承诺书
2014/05/29 职场文书
2014法院干警廉洁警示教育思想汇报
2014/09/13 职场文书
2014年学前班工作总结
2014/12/08 职场文书
三年级学生期末评语
2014/12/26 职场文书
前台岗位职责
2015/02/13 职场文书
四年级作文之植物
2019/09/20 职场文书