职业IT人-IT人生活圈

 找回密码
 成为会员
搜索
查看: 549|回复: 0

php 无限级数据JSON格式及JS解析`

[复制链接]
周周猪猪 发表于 2010-7-20 09:45 | 显示全部楼层 |阅读模式
公司要做个Flash效果的页面,需要个无限级树,显示用户邀请的好友及其下线,由此就构成了无限级的关系,可能下线有无限多。

Flash需要JSON格式的数据,于是,就有了如下代码:(PHP实现,C#类似,JSON库自己去下吧~~)

  1. //--查询用户下线信息,返回JSON,用于flash
  2. if(!empty($_GET['action'])&&!empty($_GET['invite'])){
  3. //固定参数请求才会返回信息
  4. if($_GET['action']=='getinfo'&&$_GET['invite']==1){
  5. //数据实体,一个实体类
  6. class UcInvite{
  7. //---显示用的数据信息
  8. public $fuid; //用户id
  9. public $funame; //用户名
  10. public $furl; //用户空间地址
  11. //---显示用的数据信息
  12. public $fchilds; //子类集合
  13. }
  14. $invitecount = 0; //总数量,用于记录全部下线数量
  15. //递归实现方法
  16. function GetShowTreeInvite($uid){
  17. global $_SGLOBAL,$invitecount;
  18. //组织sql语句并查询,表中fuid是下线的id,uid是父id,fusername是用户名字
  19. $inv_sql = "select fuid,fusername from ".tname("invite")." where uid = ".$uid;
  20. $inv_query = $_SGLOBAL['db']->query($inv_sql);
  21. //下表及返回数组
  22. $index = 0;
  23. $inviteTree = Array();
  24. $invitezcount = 0; //每个子类下的数量
  25. //循环添加信息到数组
  26. while($v = $_SGLOBAL['db']->fetch_array($inv_query)){
  27. $ui = new UcInvite();
  28. $ui->fuid = $v['fuid'];
  29. $ui->funame = $v['fusername'];
  30. $ui->furl = "/home/space.php?uid=".$v['fuid'];
  31. //调用自己,递归查询子类信息
  32. $ui->fchilds=GetShowTreeInvite($v['fuid']);
  33. //插入返回的数组中
  34. $inviteTree[$index]=$ui;
  35. $index++;
  36. $invitecount++;
  37. $invitezcount++;
  38. }
  39. //记录当前下线的下线数量
  40. $inviteTree['invitezcount'] = $invitezcount;
  41. //返回数组信息
  42. return $inviteTree;
  43. }
  44. $fuid = empty($_GET['fuid'])?$space[uid]:$_GET['fuid'];
  45. //根据当前登录用户ID查询信息,并返回一个集合
  46. $inviteTree = GetShowTreeInvite($fuid);
  47. //记录总下线数
  48. $inviteTree['invitecount'] = $invitecount;
  49. //引入json库,这里用的是Services_JSON
  50. //因为并不确定服务器都是PHP5.2以上版本,所以没有用自带的JSON函数
  51. require_once('../plugins/JSON/JSON.php');
  52. //json输出
  53. $json = new Services_JSON();
  54. echo $json->encode($inviteTree);
  55. exit;
  56. }else{
  57. echo '请求参数错误!';
  58. exit;
  59. }
  60. }
  61. //--查询用户下线信息,返回JSON,用于flash
复制代码
以上代码返回一个JSON字符串,如:
{'0':{'fuid':'950','funame':'郭梓原','furl':'/home/space.php?uid=950','fchilds':{'invitezcount':0}},'invitezcount':1,'invitecount':1}
这里只查询了一个
接下来用JS进行以下解析:

  1. <script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1/jquery.min.js"></script>
  2. <script type="text/javascript">
  3. //fuid 用户ID
  4. //funame 用户名称
  5. //furl 用户主页地址
  6. //invitezcount 每个用户的子类数量
  7. //invitecount 该用户的所有下级数量
  8. var str = "";
  9. function GetShow(obj,qi,index){
  10. for (var one in obj)
  11. {
  12. for(var key in obj[one])
  13. {
  14. index++;
  15. if(key=="fchilds"&&obj[one][key]['invitezcount']!=0){
  16. var aqi = qi;
  17. if(index>1)aqi+=" "
  18. GetShow(obj[one][key],aqi,index)
  19. }
  20. if(key != 'fchilds'){
  21. if(key=="fuid"){
  22. str += qi+key+"="+obj[one][key] + ",";
  23. }else{
  24. str += key+"="+obj[one][key] + ",";
  25. }
  26. if(key == "furl"){
  27. str+="<br/>";
  28. }
  29. }
  30. }
  31. if(one=="invitezcount"||one=="invitecount"){
  32. str+=qi+one+"="+obj[one]+"<br/>";
  33. }
  34. }
  35. }
  36. //固定参数do=charadegarden&action=getinfo&invite=1,fuid为测试时使用,不填写将调用系统当前登录的用户ID
  37. var url = 'http://localhost/home/space.php?do=charadegarden&action=getinfo&invite=1&fuid=344';
  38. $.get(url,function(html){
  39. //获得json并转为对象
  40. if(html){
  41. var obj = eval("["+html+"]");
  42. GetShow(obj[0],"",1)
  43. document.write(str);
  44. document.write("<br/><br/><br/><br/>");
  45. document.write("<b>JSON格式:</b><br/>");
  46. document.write(html);
  47. }
  48. });
  49. </script>
复制代码
您需要登录后才可以回帖 登录 | 成为会员

本版积分规则

QQ|手机版|小黑屋|网站帮助|职业IT人-IT人生活圈 ( 粤ICP备12053935号-1 )|网站地图
本站文章版权归原发布者及原出处所有。内容为作者个人观点,并不代表本站赞同其观点和对其真实性负责,本站只提供参考并不构成任何投资及应用建议。本站是信息平台,网站上部分文章为转载,并不用于任何商业目的,我们已经尽可能的对作者和来源进行了通告,但是能力有限或疏忽造成漏登,请及时联系我们,我们将根据著作权人的要求立即更正或者删除有关内容。

GMT+8, 2024-4-28 03:40 , Processed in 0.133482 second(s), 20 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表