Php 来自一个AJAX请求的多个响应

Php 来自一个AJAX请求的多个响应,php,javascript,ajax,json,Php,Javascript,Ajax,Json,这里没有真正的代码示例,只是概念 我现在在一个页面上有三个部分,它们通过对PHP脚本的三个单独的AJAX调用进行更新,这些调用返回JSON。将这三个调用压缩成一个更大的调用并在客户端接收JSON响应的最简单方法是什么?如何在客户端上分离响应,以便根据返回的信息操作响应数据?您可以将JSON格式化为以下格式: "user" : [ { "name" : "Harry", "hobby" : "Skating" }, { "name" : "Dave", "hobby

这里没有真正的代码示例,只是概念


我现在在一个页面上有三个部分,它们通过对PHP脚本的三个单独的AJAX调用进行更新,这些调用返回JSON。将这三个调用压缩成一个更大的调用并在客户端接收JSON响应的最简单方法是什么?如何在客户端上分离响应,以便根据返回的信息操作响应数据?

您可以将JSON格式化为以下格式:

"user" : [ {
    "name" : "Harry",
    "hobby" : "Skating"
}, {
    "name" : "Dave",
    "hobby" : "Scuba Diving"
} ],
"news" : [ {
    "date" : "3/13/05",
    "title" : "Blah",
    "postedby" : "Mike",
} ]
现在在您的AJAX响应中:

var data = eval('('+ xhr.responseText +')'); // Ajax response
var user = data.user[0].name; // Harry
var user2 = data.user[1].name; // Dave
var title = data.news[0].title;

可以使用for循环遍历数据。在上面的示例中,您现在应该了解如何使用PHP将JSON格式化为多个类别(用户、新闻等),并只需一次调用即可返回所有内容。如果您想要一个更详细的示例,请参阅文章以及。

我认为您必须根据页面上的这3个部分制作JSON格式,对它们进行标识,以便在响应后可以将它们填充到这些部分

我喜欢Cris的方法,但我认为我可以提供一些改进。由于您已经有了3个独立的实体,为了减少重新编码的需要,您可以通过
include'page.PHP'
将PHP合并到一个文件中,并通过JSON发送一个对象,该对象的属性根据每个实体的功能命名(比如“名称”、“日期”和“模糊内容”)。然后,发送请求的客户端代码只需在一个请求中发送3个函数各自发送的所有参数。返回的JSON看起来像这样(将您的对象/数组/任何内容放在注释区域):

一旦您将其发送到客户端,我假设每个客户端可能已经有一个函数(或一组函数)来处理其返回数据,您应该能够以以下方式调用它们:

function handler(retText) {
    var returnedObject = eval(retText);

    doStuffWithNames(returnedObject.names);
    doStuffWithDates(returnedObject.dates);
    playWithFuzzyThings(returnedObject.fuzzyThings);
}
此外,在PHP端,您可以通过以下方式创建统一的PHP页面(无需重新编码):


注意:您可能需要编辑3个php页面,以便它们能够正确地检查$\u POST,并且不会干扰其他页面的功能。如果您还没有这样做,我更喜欢使用
if(isset($\u POST['where']){…}
的方法来检查所有内容是否正确发送,您可以包含任意数量的内容,如果与php文件无关(即,您没有在该页面上使用该部分),那么它将返回一个空白属性,而您根本不会使用它(基本上使其成为“一刀切”的类型)


希望它对你有用

我个人喜欢json方法,但是如果您不熟悉json或者出于任何原因不喜欢使用它,那么有一个专门为此设计的jQuery插件,名为


在Rails社区中,有第三种方式叫RJS,它现在不那么热门,感觉有点过时,但仍然有自己的粉丝。我很好奇是否有人将RJS移植到PHP

这对我来说很有效
php代码:

//for test
$categoryName = "category";
$idcategory = "1";

 $json = "{'productcategory':[{'categoryname':'".$categoryName."','idcategory':'".$idcategory."'}]}";           
 echo $json; 
javascript:

var str = xmlhttp.responseText.trim();
var json = JSON.stringify(eval("(" + str + ")"));
var obj = JSON.parse(json);
alert(obj.productcategory[0].idcategory);
alert(obj.productcategory[0].categoryname);

我喜欢你的进步,我没有按你的方式考虑。干得好,伙计。
//for test
$categoryName = "category";
$idcategory = "1";

 $json = "{'productcategory':[{'categoryname':'".$categoryName."','idcategory':'".$idcategory."'}]}";           
 echo $json; 
var str = xmlhttp.responseText.trim();
var json = JSON.stringify(eval("(" + str + ")"));
var obj = JSON.parse(json);
alert(obj.productcategory[0].idcategory);
alert(obj.productcategory[0].categoryname);