—搞了好久好久,在此记录一下这个这个胜利的时刻!!!!作为一个合格的程序员,任重而道远啊—


项目环境:thinkphp5+mysql+ztree
项目目标:从MySQL数据库获取小区用户位置信息、用户信息利用ztree动态生成树形菜单

mysql数据库表设计
小区地点表

小区用户表


控制器代码

/*** 获取小区用户位置信息\用户信息,并转换为json格式,传给前端展示*/public function getLocationInfo(Request $request){//获取ztree自带提交的参数, 若是页面加载时第一次请求, 该参数为空,     $father_id = $request->param('id');//dump($father_id);//全局数据组$data = array();//当请求提交的参数id为空时, 只获取父菜单,if (!isset($father_id)) {//get all father menu//dump("进来了,只获取父菜单");$tempData = array();//获取数据$tempData = LocationModel::all(['LUID'=>NULL]);$a = array();$temp = array();/** JSON数据封装时注意事项, 要求返回的json数据属性为父* {"id":"52","name":"","pid":"null","isParent":true}* 其中id为子节点id, pid为父节点id, name为节点名, isParent标明该节点是否属于父* 节点, 这四个属性**必须***/foreach ($tempData as $value) {$temp['id'] = $value['LID'];$temp['name'] = $value['LName'];$temp['pid'] = $value['LUID'];$temp['isParent'] = $value['isParent'];//加了[],相当于把$a(一维数组)转变为二维数组(自己总结的~~)$a[] = $temp;unset($temp);}//将临时数组$a赋值给全局数组$data,作为返回$data = $a;unset($a);} else { //子节点被点击时,即从前端传来的$father_id不为空时//获取父节点长度,用于判断是加载二三级目录还是加载客户名录列表(小区位置表与小区用户表不是一张表,需要关联查询)$father_id_length = strlen($father_id);//如果获取到的id长度小于3,只加载二级三级目录(二级目录楼栋,三级目录单元)if($father_id_length < 3){//dump('<<<<<3');$tempData = array();$tempData = LocationModel::all(['LUID'=>$father_id]);$a = array();$temp = array();foreach ($tempData as $value) {$temp['id'] = $value['LID'];$temp['name'] = $value['LName'];$temp['pid'] = $father_id;$temp['isParent'] = $value['isParent'];$a[] = $temp;unset($temp);}$data = $a;unset($a);//1、获取客户列表//2、用取得的id(前端通过点击节点传来的父节点id)去客户表(customer)中查询是否存在该父节点下系列客户//若存在则返回json数据,不存在不返回//3、find()-查询单条数据,若查不到数据返回null} else if(LocationModel::table('customer')->where('LID',$father_id)->find()){  //dump('>>>>>>>>3');$tempData1 = LocationModel::table('location loc, customer cus')->where('loc.LID = cus.LID')->field('cus.CID,cus.Name,cus.RoomNo,cus.LID,cus.isParent')->order('cus.CID asc' )->select();$a1 = array();$temp1 = array();foreach ($tempData1 as $value) {$temp1['id'] = $value['CID'];$temp1['name'] = $value['Name'];$temp1['pid'] = $value['LID'];$temp1['isParent'] = $value['isParent'];$a1[] = $temp1;unset($temp1);}$data = $a1;unset($a1);}}//json数据返回//将数组转化为json返回,thinkPHP5return json_encode($data);}

前端htmL代码

<!--引入zTree css样式文件-->
{load href="__STATIC__/lib/zTree/v3/css/zTreeStyle/zTreeStyle.css" /} {/block}
<!-- ztree容器 -->
<ul id="mytree" class="ztree"></ul>
<!--引入zTree js文件-->
<script type="text/javascript" src="__STATIC__/lib/zTree/v3/js/jquery.ztree.all-3.5.min.js"></script>
<script type="text/javascript">var setting = {//设置数据格式data: {simpleData: {enable: true,idKey: "id",pIdKey: "pId",rootPId: 0,}},//可勾选check: {enable: true,chkStyle: "checkbox",},async: {enable: true,dataType: "json",url: "getLocationInfo",autoParam: ["id"],type:'post',},// 回调函数  callback : {  beforeAsync: zTreeBeforeAsync,onAsyncSuccess: zTreeOnAsyncSuccess, onAsyncError: zTreeOnAsyncError,},};//用于捕获异步加载之前的事件回调函数,zTree 根据返回值确定是否允许进行异步加载function zTreeBeforeAsync(treeId, treeNode) {//alert("这是异步加载之前的事件回调函数");};//异步请求成功的回掉函数//treeId-mytreefunction zTreeOnAsyncSuccess(event, treeId, treeNode, msg) {//alert(msg);};//异步请求失败的回调函数function zTreeOnAsyncError(event, treeId, treeNode, XMLHttpRequest, textStatus, errorThrown) {alert('请求失败!');alert(XMLHttpRequest);};$(function() {$.fn.zTree.init($("#mytree"), setting);});</script>

效果图


完结!!!!!!!!!!
———————-重新更新过,现在更完整!—————————-

使用ztree异步加载数据库数据形成树形菜单相关推荐

  1. ECharts3 实现 AJAX异步加载 数据库数据

    ECharts3的文档里其实对异步加载说的很明白,但是示例都是生成的随机数据,大多数应用是直接读数据库数据然后动态加载到ECharts图表里的,简单的思路就是把需要显示的数据库数据封装成json格式, ...

  2. Angular16 Angular整合zTree、异步加载节点数据

    1 前提准备 1.1 新建一个angular4项目 参考博文:点击前往 1.2 去zTree官网下载zTree zTree官网:点击前往 三少使用的版本:点击前往 1.3 参考博客 点击前往01    ...

  3. zTree 异步加载

    前几天一直在研究zTree 怎么实现异步加载,看了很多文章头也是蒙蒙的,现在自己来总结一下,在这里先解释一下所谓的异步加载.异步加载就是数据没有一次性全部加载出来,当用户点击父节点上的"+& ...

  4. php ztree异步加载数据格式,zTree异步加载简单demo

    这几天花了些时间,试了试zTree自带的异步加载方式 还不错. 有个奇怪的问题: 无论我在服务器设置 setContentType("text/plain;charset=UTF-8&quo ...

  5. ztree java 异步_使用 zTree 异步加载

    使用 zTree 异步加载 使用场景 可能需要展示类别很多,如果采用直接加载的方式,需要展示的数据量过大,交互十分不友好.所以采用 zTree 异步加载数据. demo 环境 SpringBoot 1 ...

  6. WinForm使用多线程异步加载界面数据

    WinForm使用多线程异步加载界面数据 处于学习阶段,做个记录,如有写错,请多多指教. private void FrmQC111_Load(object sender, EventArgs e) ...

  7. Android ListView异步加载数据库图片

    需求:从数据库中得到图片的byte数据,编码成png图片,显示到ListView上 这里最大一个问题就是ListView滑动卡的问题,要解决卡,就需要用到异步加载数据库的图片: 原创博客,转载注明出处 ...

  8. Android 应用开发 之通过AsyncTask与ThreadPool(线程池)两种方式异步加载大量数据的分析与对比

    Android 应用开发 之通过AsyncTask与ThreadPool(线程池)两种方式异步加载大量数据的分析与对比 标签: AndroidAsyncTaskThreadPool异步加载view 2 ...

  9. ztree异步加载数据amp;amp;amp;amp;amp;amp;amp;amp;给父节点动态追加子节点

    对于ztree,整了两天了,在数据库中查出json符合格式的数据,这很好整,但是在ztree追加时出现重复节点,找了半天资源,最终还是用ztree自带的异步加载解决问题,特此记录一下下!!如果不足请指 ...

最新文章

  1. css div 垂直居中设置
  2. python自动化测试脚本怎么编写_编写自动化测试脚本心得---菜鸟入门篇
  3. 掌握 React 与 React Native
  4. 2018年面试准备汇总
  5. Windows驱动——利用WinDriver开发PCI设备驱动程序
  6. Android File存储
  7. 全球顶级银行资管子公司的启示
  8. Alfred效率神器
  9. pay.onzan.en app.php,IBOS 协同办公平台PHP版 v1.0
  10. 伦敦 quant_伦敦统一用户组7
  11. 《Cinema 4D + After Effects动态图形设计案例解析》——第 1 章 动态图形设计概述 1.1 什么是动态图形...
  12. gmail+mtalk配合打免费网络电话。
  13. linux dns 自动识别,Linux 自动化部署DNS服务器
  14. Redis从生米煮成熟饭
  15. win7 linux终端模拟器,SecureCRT(终端仿真器)
  16. 入门知识 | 计算机语言
  17. java 抽象类题目
  18. 怎么用计算机管理权限删除文件,如何删除需要管理员权限才能删除的文件夹?...
  19. SEO关键词分析优化工具
  20. 宝塔php原理,宝塔php建站教程

热门文章

  1. 从FFmpeg源码去解决IJKPlayer直播花屏问题
  2. python range函数返回的是什么,python中range函数用法是什么
  3. java使用了未经检查或不安全的操作
  4. 无符号类型 java_java的基本数据类型是无符号的
  5. 并发实际场景(保持余额操作的正确)
  6. 干货分享|纯CSS绘制电池充电水波纹动效(uni-app|view组件版)
  7. 什么是 Google App Engine?
  8. 判断一个项目的好与坏首先要看它的社会价值是否足够大
  9. HTML中的空格符使用总结
  10. DHCP协议(或许是最详细的版本)