php 无限级数据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>

  

  这样,两个无限级的操作就完成了,结果截图:

  

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

珍惜劳动成果,虽说内容不多,可是也是一个一个字打上的,转载请注明!!关注爱拼可乐吧