PHP关于Ajax返回多个json数据的处理

时间:2022-10-16 18:59:37

当我们用Ajax返回数据时,有时会遇到这种情况,需要返回多个json对象。然而我们解析一个json对象容易,返回多个json对象怎么办了。

如:

返回一个json对象

$list =array("name"=>"zhangsan","age"=>18);
echo json_encode($list);

若要在返回一个json对象

$list =array("name"=>"wangwu","age"=>20);
echo json_encode($list);

此时使用ajax的客户端会收到这样的json数据

{"name"=>"zhangsan","age"=>18}{"name"=>"wangwu","age"=>20}

这个根本没法用json解析


所以遇到这种返回多个json对象时,我们应该这样做

假设我们使用XMLHttpRequest进行Ajax操作

第一:对于服务器返回json数据

$list =array("name"=>"zhangsan","age"=>18);

echo json_encode($list);

echo ",";//这步非常重要,用来隔离两个json返回对象

$list =array("name"=>"wangwu","age"=>20);
echo json_encode($list);


第二:客户端操作

客户端首先要将要服务器返回的json对象加上“一层衣服”

var result = xhr.responseText;
var temp= "{\"Person\":[" + result +"]}";


穿完这层衣服就好办了,我们就可以解析json对象并使用了

var json = eval('('+temp+')');
alert(json.Person[0].name);


附上完整的服务端,客户端代码如下:


客户端:(这是JS代码)

//创建Ajax对象,对象调用成员实现对服务器的请求
//1.创建对象
var xhr =new XMLHttpRequest();

//设置事件onreadystatechange 感知ajax状态变化
xhr.onreadystatechange = function(){

console.log(xhr.readyState);
if(xhr.readyState == 4)
{
var result = xhr.responseText;
var temp= "{\"Person\":[" + result +"]}";
              var json = eval('('+temp+')');

alert(json.Person[0].name);
document.body.innerHTML +=json.Person[1].name;
}
}

//2.创建一个新的Htpp请求(打开浏览器,输入请求地址)
//xhr.open(请求方式get/post,请求地址,[异步同步请求])
//POST方式 是将表单数据以XML形式传递给服务器
xhr.open("get",'Server.php');

//3.发送请求
//xhr.send(post请求数据/get请求设置null)
xhr.send(null);


服务端:(PHP代码)

$list =array("name"=>"zhangsan","age"=>18);

echo json_encode($list);
$list =array("name"=>"wangwu","age"=>20);
echo ",";
echo json_encode($list);