php 无限级数据JSON格式及JS解析
2015-01-24信息快讯网
公司要做个Flash效果的页面,需要个无限级树,显示用户邀请的好友及其下线,由此就构成了无限级的关系,可能下线有无限多。
Flash需要JSON格式的数据,于是,就有了如下代码:(PHP实现,C#类似,JSON库自己去下吧~~)//--查询用户下线信息,返回JSON,用于flash if(!empty($_GET['action'])&&!empty($_GET['invite'])){ //固定参数请求才会返回信息 if($_GET['action']=='getinfo'&&$_GET['invite']==1){ //数据实体,一个实体类 class UcInvite{ //---显示用的数据信息 public $fuid; //用户id public $funame; //用户名 public $furl; //用户空间地址 //---显示用的数据信息 public $fchilds; //子类集合 } $invitecount = 0; //总数量,用于记录全部下线数量 //递归实现方法 function GetShowTreeInvite($uid){ global $_SGLOBAL,$invitecount; //组织sql语句并查询,表中fuid是下线的id,uid是父id,fusername是用户名字 $inv_sql = "select fuid,fusername from ".tname("invite")." where uid = ".$uid; $inv_query = $_SGLOBAL['db']->query($inv_sql); //下表及返回数组 $index = 0; $inviteTree = Array(); $invitezcount = 0; //每个子类下的数量 //循环添加信息到数组 while($v = $_SGLOBAL['db']->fetch_array($inv_query)){ $ui = new UcInvite(); $ui->fuid = $v['fuid']; $ui->funame = $v['fusername']; $ui->furl = "/home/space.php?uid=".$v['fuid']; //调用自己,递归查询子类信息 $ui->fchilds=GetShowTreeInvite($v['fuid']); //插入返回的数组中 $inviteTree[$index]=$ui; $index++; $invitecount++; $invitezcount++; } //记录当前下线的下线数量 $inviteTree['invitezcount'] = $invitezcount; //返回数组信息 return $inviteTree; } $fuid = empty($_GET['fuid'])?$space[uid]:$_GET['fuid']; //根据当前登录用户ID查询信息,并返回一个集合 $inviteTree = GetShowTreeInvite($fuid); //记录总下线数 $inviteTree['invitecount'] = $invitecount; //引入json库,这里用的是Services_JSON //因为并不确定服务器都是PHP5.2以上版本,所以没有用自带的JSON函数 require_once('../plugins/JSON/JSON.php'); //json输出 $json = new Services_JSON(); echo $json->encode($inviteTree); exit; }else{ echo '请求参数错误!'; exit; } } //--查询用户下线信息,返回JSON,用于flash
以上代码返回一个JSON字符串,如:
{'0':{'fuid':'950','funame':'郭梓原','furl':'/home/space.php?uid=950','fchilds':{'invitezcount':0}},'invitezcount':1,'invitecount':1}
这里只查询了一个
接下来用JS进行以下解析:
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1/jquery.min.js"></script> <script type="text/javascript"> //fuid 用户ID //funame 用户名称 //furl 用户主页地址 //invitezcount 每个用户的子类数量 //invitecount 该用户的所有下级数量 var str = ""; function GetShow(obj,qi,index){ for (var one in obj) { for(var key in obj[one]) { index++; if(key=="fchilds"&&obj[one][key]['invitezcount']!=0){ var aqi = qi; if(index>1)aqi+=" " GetShow(obj[one][key],aqi,index) } if(key != 'fchilds'){ if(key=="fuid"){ str += qi+key+"="+obj[one][key] + ","; }else{ str += key+"="+obj[one][key] + ","; } if(key == "furl"){ str+="<br/>"; } } } if(one=="invitezcount"||one=="invitecount"){ str+=qi+one+"="+obj[one]+"<br/>"; } } } //固定参数do=charadegarden&action=getinfo&invite=1,fuid为测试时使用,不填写将调用系统当前登录的用户ID var url = 'http://localhost/home/space.php?do=charadegarden&action=getinfo&invite=1&fuid=344'; $.get(url,function(html){ //获得json并转为对象 if(html){ var obj = eval("["+html+"]"); GetShow(obj[0],"",1) document.write(str); document.write("<br/><br/><br/><br/>"); document.write("<b>JSON格式:</b><br/>"); document.write(html); } }); </script>
这样,两个无限级的操作就完成了,结果截图:
珍惜劳动成果,虽说内容不多,可是也是一个一个字打上的,转载请注明!!关注爱拼可乐吧
php curl常见错误:SSL错误、bool(false)
PHP+Ajax异步通讯实现用户名邮箱验证是否已注册( 2种方法实现)
PHP写UltraEdit插件脚本实现方法
最新用php获取谷歌PR值算法,附上php查询PR值代码示例
php操作JSON格式数据的实现代码
使用JSON实现数据的跨域传输的php代码
如何使用Linux的Crontab定时执行PHP脚本的方法
DISCUZ在win2003环境下 Unable to access ./include/common.inc.php in... 的问题终极解决方案
PHP学习散记_编码(json_encode 中文不显示)
让Json更懂中文(JSON_UNESCAPED_UNICODE)
php json_encode奇怪问题说明
php将会员数据导入到ucenter的代码
php下使用strpos需要注意 === 运算符
按上下级层次关系输出内容的PHP代码
PHP开发负载均衡指南
PHP无敌近乎加密方式!
生成ubuntu自动切换壁纸xml文件的php代码
PHP XML error parsing SOAP payload on line 1
PHP中json_encode、json_decode与serialize、unserialize的性能测试分析
IIS下PHP连接数据库提示mysql undefined function mysql_connect()
PHP JSON 数据解析代码
Joomla下利用configuration.php存储简单数据
有关JSON以及JSON在PHP中的应用
ExtJS与PHP、MySQL实现存储的方法
THINKPHP+JS实现缩放图片式截图的实现
GBK的页面输出JSON格式的php函数