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加MYSQL服务器
Oct 09 PHP
浅析PHP水印技术
Feb 14 PHP
如何设置mysql允许外网访问
Jun 04 PHP
destoon实现调用自增数字从1开始的方法
Aug 21 PHP
IIS下PHP的三种配置方式对比
Nov 20 PHP
php简单操作mysql数据库的类
Apr 16 PHP
PHP实现图片上传并压缩
Dec 22 PHP
php常用数组array函数实例总结【赋值,拆分,合并,计算,添加,删除,查询,判断,排序】
Dec 07 PHP
PHP实现登录注册之BootStrap表单功能
Sep 03 PHP
windows环境下使用Composer安装ThinkPHP5
May 18 PHP
PHP+ajax实现二级联动菜单功能示例
Aug 10 PHP
php实现小程序支付完整版
Oct 09 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
《一拳超人》埼玉一拳下去,他们存在了800年毫无意义!
2020/03/02 日漫
ThinkPHP CURD方法之page方法详解
2014/06/18 PHP
php中二维数组排序问题方法详解
2015/08/28 PHP
Laravel框架中缓存的使用方法分析
2019/09/06 PHP
js 刷新页面的代码小结 推荐
2010/04/02 Javascript
JavaScript中函数声明优先于变量声明的实例分析
2012/03/01 Javascript
三种检测iPhone/iPad设备方向的方法
2014/04/23 Javascript
浏览器窗口大小变化时使用resize事件对框架不起作用的解决方法
2014/05/11 Javascript
分享20个提升网站界面体验的jQuery插件
2014/12/15 Javascript
nodejs 中模拟实现 emmiter 自定义事件
2016/02/22 NodeJs
浅谈JS封闭函数、闭包、内置对象
2017/07/18 Javascript
javascript将url解析为json格式的两种方法
2017/08/18 Javascript
妙用缓存调用链实现JS方法的重载
2018/04/30 Javascript
浅谈VueJS SSR 后端绘制内存泄漏的相关解决经验
2018/12/20 Javascript
利用Electron简单撸一个Markdown编辑器的方法
2019/06/10 Javascript
Vue实现页面添加水印功能
2019/11/09 Javascript
Node.js控制台彩色输出的方法与原理实例详解
2019/12/01 Javascript
Vue2.4+新增属性.sync、$attrs、$listeners的具体使用
2020/03/08 Javascript
JavaScript中常用的3种弹出提示框(alert、confirm、prompt)
2020/11/10 Javascript
[42:23]完美世界DOTA2联赛PWL S3 Forest vs Rebirth 第二场 12.10
2020/12/13 DOTA
python实现根据用户输入从电影网站获取影片信息的方法
2015/04/07 Python
详解Python的Django框架中Manager方法的使用
2015/07/21 Python
Python3的urllib.parse常用函数小结(urlencode,quote,quote_plus,unquote,unquote_plus等)
2016/09/18 Python
Django ORM 聚合查询和分组查询实现详解
2019/08/09 Python
Python 面向对象之封装、继承、多态操作实例分析
2019/11/21 Python
法国隐形眼镜网站:VisionDirect.fr
2020/03/03 全球购物
心理学专业毕业生推荐信范文
2013/11/21 职场文书
群众路线剖析材料范文
2014/10/09 职场文书
家庭财产分割协议书范本
2014/11/24 职场文书
会议通知格式范文
2015/04/15 职场文书
总经理致辞
2015/07/29 职场文书
企业愿景口号
2015/12/25 职场文书
小学班级管理心得体会
2016/01/07 职场文书
人身损害赔偿协议书
2016/03/22 职场文书
深度学习小工程练习之垃圾分类详解
2021/04/14 Python
插件导致ECharts被全量引入的坑示例解析
2022/09/23 Javascript