这里不是真正寻找代码示例,只是概念。
我现在在页面上有三个部分,通过对PHP脚本的三个单独的AJAX调用进行更新,这些脚本返回JSON。将这三个调用压缩为一个较大的调用并在JSON中接收客户端响应的最简单方法是什么?如何在客户端上分离响应,以便根据发回的信息操作响应数据?
答案 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);