2009-05-04 58 views
7

这里没有真正寻找代码示例,只是概念。来自一个AJAX请求的多个响应

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

回答

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文件(即你没有在该页面上使用该部分),那么它将返回一个空白属性,并且你根本不会使用它(基本上使它成为“一刀切”类型的东西)。

希望工程为ya!

+0

我喜欢你的进步,我也没多想你的方式。做得好的伴侣。 – 2009-05-04 04:32:29

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

0

我认为你必须做一个JSON格式根据页面上的3个部分,其中ID以便响应后您可以将它们填充到那些部分。

0

我个人喜欢JSON的方法,但如果你是新来的JSON或感觉不舒服的工作以任何理由还有一个jQuery插件,专门为此呼吁jQuery Taconite Plugin

在Rails社区设计有一个第三种叫RJS的方式现在并不那么热,感觉有些陈旧,但仍然有自己的粉丝。我很好奇,如果有人将RJS移植到PHP或不?

0

这workimg我
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);