php 无限级数据JSON格式及JS解析 |
本文标签:无限级,JSON,JS解析 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> 这样,两个无限级的操作就完成了,结果截图:
珍惜劳动成果,虽说内容不多,可是也是一个一个字打上的,转载请注明!!关注爱拼可乐吧 |