简简单单——无限级数据JSON格式及JS解析

公司要做个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+="&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;"
                
                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>

 

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

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

 

 

posted @ 2010-07-15 12:39  壊小子  阅读(2647)  评论(4编辑  收藏  举报