2009-05-04 97 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);