### 头一回把代码写成这样(thinkphp5.0),自己都不知道获取到的 json 数组已经是几维,但是前台使用 js 解析的过程中还是蛮辛苦的,大致流程如下:
-代码工作流程:
-get 到相应接口后,ajax 异步访问后台服务器;
-服务器接收 post 请求查询对应数据,查询的结果为两个结果集封装在一个 json 数组中,数组每项为一个 object 对象,每个对象含有两个子对象,其中一个子对象包含多个不定子对象(我自己都晕);
-ajax 回调函数收到 json 数据后,多个嵌套循环解析数据,插入文档 DOM 元素。
### 上 js 代码:
$(function () {
$.ajax({
type:"post",
url:"{:url('Index/zjbbdata')}",
dataType:'json',
success:function(data){
//console.log(data['result'][0].category.CategoryName);
$.each(data['result'],function (i,item) {
$.each(data['result'][i],function (j,item2) {
//接收到json数据result[category];
//console.log(item2);
if(Object.prototype.toString.call(item2)!='[object Array]')//item2为数组时跳过append();
{
$(".main").append('
'+item2.CategoryName+'
'+item.app.length+'款产品
}//第一次判断数组结束
//console.log(item3);
if(Object.prototype.toString.call(item2)=='[object Array]')//item3为数组时执行append();
{
$.each(data['result'][i],function (n,item3) {
//console.log(item3);
$.each(data['result'][i][n],function (m,item4) {
//console.log(item4);
if(typeof (item4)=='object') //判断item4此时为对象;
{
$(".main").append('
-
13.71MB
'+item4.DownloadCount+'万次下载
}
})//item4循环结束;
});//item3循环
}//第二次判断数据结束;
});//item2循环
});//item循环
}
});
});
### 上 php 代码:
public function zjbbdata()
{
$cate=db('category')->select();
foreach($cate as $n=> $val){
$con['CategoryID']=$val['CategoryID'];
$apps[$n]=db('apps')->alias('a')->where($con)->order("DownloadCount DESC")->limit(5)->select();
$data[$n]=array(
'category'=>$val,
'app'=>$apps[$n],
);
}
//var_dump($data[10]);
return (array( 'result'=>$data,'status'=>1, 'msg'=>'获取成功!'));
}