php 无限级数据JSON格式及JS解析
2018-09-07 17:32
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=
<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==invitezcountone==invitecount){
str+=qi+one+=+obj[one]+<br/>;
}
}
}
//固定参数do=charadegarden&action=getinfo&invite=1,fuid为测试时使用,不填写将调用系统当前登录的用户ID
var url =
$.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>
这样,两个无限级的操作就完成了,结果截图:
珍惜劳动成果,虽说内容不多,可是也是一个一个字打上的,转载请注明!!关注爱拼可乐吧