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

时间:2009-05-04 03:31:39

标签: php javascript ajax json

这里不是真正寻找代码示例,只是概念。

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

5 个答案:

答案 0 :(得分:4)

我喜欢克里斯的方法,但我认为我可以提供一些改进。由于您已经拥有3个单独的实体,为了减少重新编码所有内容的需要,您可以通过include 'page.php'将PHP合并到一个文件中并通过JSON发回一个对象,其中的属性命名为每个他们这样做(让我们说“名字”,“日期”和“模糊的事情”)。发送请求的客户端代码将简单地将您的3个函数的所有参数单独发送到一个请求中。返回的JSON将看起来像这样(将您的对象/数组/任何内容放在注释区域中):

{
    "names" : {/*stuff needed for names goes in here*/},
    "dates" : {/*stuff needed for dates goes in here*/},
    "fuzzyThings" : {/*all fuzzy things goes in here*/}
}

一旦你将它传达给客户端,因为我假设每个人可能已经有一个函数(或一组函数)来处理它的返回数据,你应该能够以这种方式调用它们:

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

    doStuffWithNames(returnedObject.names);
    doStuffWithDates(returnedObject.dates);
    playWithFuzzyThings(returnedObject.fuzzyThings);
}

此外,在PHP端,您可以通过以下方式创建统一的PHP页面(无需重新编码任何内容):

<?php
    echo '{';
        echo '"names":{';
        include 'names.php';
        echo '},';

        echo '"dates":{';
        include 'dates.php';
        echo '},';

        echo '"fuzzyThings":{';
        include 'fuzzyThings.php';
        echo '}';
    echo '}';
?>

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

希望它适用于你!

答案 1 :(得分:3)

您可以像这样格式化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,并通过一次调用返回所有内容。如果您想要更详细的示例,请参阅this文章以及this

答案 2 :(得分:0)

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

答案 3 :(得分:0)

我个人喜欢json方法,但是如果你是json的新手,或者因为任何原因感觉不舒服,那么专门为此设计的jQuery插件名为jQuery Taconite Plugin

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

答案 4 :(得分:0)

这对我有用 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);