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

公司要做个Flash效果的页面,需要个无限级树,显示用户邀请的好友及其下线,由此就构成了无限级的关系,可能下线有无限多。Flash需要JSON格式的数据,于是,就有了如下代码:(PHP实现,C#类似,JSON库自己去下吧~~)

 

ExpandedBlockStart.gif 代码
// --查询用户下线信息,返回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进行以下解析:

 

ExpandedBlockStart.gif 代码
< 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>

 

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

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

 

 

转载于:https://www.cnblogs.com/charleszhang/archive/2010/07/15/1777930.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值