2009-05-04 38 views
7

ここではコード例は実際には探していません。1つのAJAXリクエストからの複数の応答

ページに3つのセクションがあり、JSONを返すPHPスクリプトへの3回の別々のAJAX呼び出しによって更新されています。これらの3つの呼び出しを1つの大きな呼び出しに集約し、JSONのクライアントで応答を受け取る最も簡単な方法は何ですか?どのように情報を送り返すかに基づいてレスポンスデータを操作できるように、クライアント上のレスポンスをどのように分離するのですか?

答えて

4

私はCris 'メソッドが好きですが、少し改善ができると思います。 3つの別個のエンティティを既に持っているので、すべてを記録する必要性を減らすために、include 'page.php'を介してPHPを1つのファイルに結合し、JSONを介してオブジェクトを戻します。 「名前」、「日付」、「ファジィトゥング」など)リクエストを送信するクライアントコードは、3つの関数が個別に送信したすべての引数を1つのリクエストで送信するだけです。返される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

を、私はそれについてあなたの方法を考えていませんでした。よくやった仲間。 –

3

あなたはこのようなあなたのJSONをフォーマットすることができます:あなたのAJAX応答で

"user" : [ { 
    "name" : "Harry", 
    "hobby" : "Skating" 
}, { 
    "name" : "Dave", 
    "hobby" : "Scuba Diving" 
} ], 
"news" : [ { 
    "date" : "3/13/05", 
    "title" : "Blah", 
    "postedby" : "Mike", 
} ] 

そして今:

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; 

あなたはデータを横断するためのループを使用することができます。上記の例では、PHPを使用してJSONを複数のカテゴリ(ユーザー、ニュース、その他)でフォーマットし、1回の呼び出しですべてを返す方法を見ています。より精巧な例をご希望の場合は、thisの記事とthisをご参照ください。

0

ページの3つのセクションに従ってJSON形式を作成してIDを作成しなければならないと思うので、応答後にそれらのセクションにデータを取り込むことができます。

0

私は個人的にJSONの方法のようなしかし、あなたはJSONに新しいしているか、いずれかの理由のためにそれで作業快適に感じていない場合がありますRailsのコミュニティでjQuery Taconite Plugin

と呼ばれ、この目的のために特別に設計されたjQueryプラグインがありますRJSと呼ばれる第3の方法は今日はそれほど暑くはなく、少し古くなったと感じていますが、依然として独自のファンを持っています。誰かがRJSをPHPに移植したのかどうか分かりましたか?

//for test 
$categoryName = "category"; 
$idcategory = "1"; 

$json = "{'productcategory':[{'categoryname':'".$categoryName."','idcategory':'".$idcategory."'}]}";   
echo $json; 

のjavascript::これは私のため
PHPコードworkimgさ

0

私はあなたの改善を好き

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); 
関連する問題