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 相关文章推荐
动态新闻发布的实现及其技巧
Oct 09 PHP
php连接mssql数据库的几种方法
Feb 21 PHP
PHP 使用MySQL管理Session的回调函数详解
Jun 21 PHP
php 启动报错如何解决
Jan 17 PHP
php实现有趣的人品测试程序实例
Jun 08 PHP
php简单创建zip压缩文件的方法
Apr 30 PHP
PHP简单获取网站百度搜索和搜狗搜索收录量的方法
Aug 23 PHP
mysql desc(DESCRIBE)命令实例讲解
Sep 24 PHP
PHP实现从PostgreSQL数据库检索数据分页显示及根据条件查找数据示例
Jun 09 PHP
php fread函数使用方法总结
May 28 PHP
PHP使用PDO创建MySQL数据库、表及插入多条数据操作示例
May 30 PHP
基于php+MySql实现学生信息管理系统实例
Aug 04 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 ckeditor上传图片文件名乱码解决方法
2013/11/15 PHP
PHP面向对象程序设计实例分析
2016/01/26 PHP
是 WordPress 让 PHP 更流行了 而不是框架
2016/02/03 PHP
PHP实现普通hash分布式算法简单示例
2018/08/06 PHP
laravel解决迁移文件一次删除创建字段报错的问题
2019/10/24 PHP
Z-Blog中用到的js代码
2007/03/15 Javascript
Jquery+ajax请求data显示在GridView上(asp.net)
2010/08/27 Javascript
原生JS和JQuery动态添加、删除表格行的方法
2015/05/28 Javascript
node.js回调函数之阻塞调用与非阻塞调用
2015/11/13 Javascript
归纳下js面向对象的几种常见写法总结
2016/08/24 Javascript
JS给Array添加是否包含字符串的简单方法
2016/10/29 Javascript
如何用js判断dom是否有存在某class的值
2017/02/13 Javascript
angular中不同的组件间传值与通信的方法
2017/11/04 Javascript
微信小程序实现折叠与展开文章功能
2018/06/12 Javascript
微信小程序实现弹出菜单
2018/07/19 Javascript
vue-content-loader内容加载器的使用方法
2018/08/05 Javascript
解决vuejs项目里css引用背景图片不能显示的问题
2018/09/13 Javascript
小程序分享模块超级详解(推荐)
2019/04/10 Javascript
JQuery事件委托原理与用法实例分析
2019/05/13 jQuery
解决Vue watch里调用方法的坑
2020/11/07 Javascript
[46:48]DOTA2上海特级锦标赛A组小组赛#2 Secret VS CDEC第三局
2016/02/25 DOTA
[03:17]史诗级大片应援2018DOTA2国际邀请赛 致敬每一位坚守遗迹的勇士
2018/07/20 DOTA
Python的time模块中的常用方法整理
2015/06/18 Python
详谈Python高阶函数与函数装饰器(推荐)
2017/09/30 Python
Python实现个人微信号自动监控告警的示例
2019/07/03 Python
python实现图片九宫格分割
2021/03/07 Python
Python编程快速上手——Excel到CSV的转换程序案例分析
2020/02/28 Python
解决jupyter notebook 出现In[*]的问题
2020/04/13 Python
python编写softmax函数、交叉熵函数实例
2020/06/11 Python
德国柯吉澳趣味家居:Koziol
2017/08/24 全球购物
Set里的元素是不能重复的,那么用什么方法来区分重复与否呢?
2016/08/18 面试题
既然说Ruby中一切都是对象,那么Ruby中类也是对象吗
2013/01/26 面试题
周恩来的四个昼夜观后感
2015/06/03 职场文书
党课主持词大全
2015/06/30 职场文书
心理健康教育主题班会
2015/08/13 职场文书
如何解决flex文本溢出问题小结
2022/07/15 HTML / CSS