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>
复制代码
这样,两个无限级的操作就完成了,结果截图:
珍惜劳动成果,虽说内容不多,可是也是一个一个字打上的,转载请注明!!关注爱拼可乐吧
|