這裏沒有真正尋找代碼示例,只是概念。來自一個AJAX請求的多個響應
我現在有一個網頁,正在通過三個獨立的AJAX更新調用PHP腳本,返回JSON的三個部分。將這三個調用壓縮成一個更大的調用並以JSON方式接收客戶端的響應最簡單的方法是什麼?我將如何分離客戶端上的響應,以便根據返回的信息來操作響應數據?
這裏沒有真正尋找代碼示例,只是概念。來自一個AJAX請求的多個響應
我現在有一個網頁,正在通過三個獨立的AJAX更新調用PHP腳本,返回JSON的三個部分。將這三個調用壓縮成一個更大的調用並以JSON方式接收客戶端的響應最簡單的方法是什麼?我將如何分離客戶端上的響應,以便根據返回的信息來操作響應數據?
我喜歡克里斯的方法,但認爲我可以提供一些改進。由於您已經有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!
您可以格式化你的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。
我認爲你必須做一個JSON格式根據頁面上的3個部分,其中ID以便響應後您可以將它們填充到那些部分。
我個人喜歡JSON的方法,但如果你是新來的JSON或感覺不舒服的工作以任何理由還有一個jQuery插件,專門爲此呼籲jQuery Taconite Plugin
在Rails社區設計有一個第三種叫RJS的方式現在並不那麼熱,感覺有些陳舊,但仍然有自己的粉絲。我很好奇,如果有人將RJS移植到PHP或不?
這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);
我喜歡你的進步,我也沒多想你的方式。做得好的伴侶。 – 2009-05-04 04:32:29