Posted in PHP onJuly 17, 2010
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 无限级数据JSON格式及JS解析
声明:登载此文出于传递更多信息之目的,并不意味着赞同其观点或证实其描述。
Reply on: @reply_date@
@reply_contents@