質問

ここでは実際にコード例を探しているのではなく、概念を探しています。

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

役に立ちましたか?

解決

クリスの方法は好きですが、少し改善できると思います。既に3つの独立したエンティティがあるため、すべてを再コーディングする必要性を減らすために、 include 'page.php' を介してPHPを1つのファイルに結合し、オブジェクトをそれぞれが何をするのかという名前のプロパティを持つJSON(" names"、" dates"、" fuzzyThings"と言います)。リクエストを送信するクライアントコードは、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を正しく確認し、まだ他のページの機能を妨げないようにする必要がある場合があります。 of if(isset($ _ POST ['whatever'])){...} を使用して、すべてが正しく送信されたことを確認します。これにより、必要な数だけ含めることができます。 phpファイルとは何の関係もない(つまり、そのページでそのセクションを使用していない)場合、空のプロパティが返され、それを使用することはありません(基本的には、「one-size-fits-all」」物の種類)。

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を複数のカテゴリ(ユーザー、ニュースなど)でフォーマットし、1回の呼び出しですべてを返す方法を確認できます。より複雑な例が必要な場合は、こちらの記事と< a href = "http://www.devarticles.com/c/a/JavaScript/AJAX-with-JSON/1/" rel = "nofollow noreferrer">これ。

ページのこれら3つのセクションに従ってJSON形式を作成し、応答後にそれらのセクションにデータを入力できるようにIDを設定する必要があると思います。

私は個人的にjsonメソッドが好きですが、jsonを初めて使用する場合、または何らかの理由でjsonメソッドを使いたくない場合は、この目的のために特別に設計されたjQueryプラグイン jQuery Taconiteプラグイン

Railsコミュニティには、RJSと呼ばれる3番目の方法があります。これは、最近ではそれほど熱くなく、少し時代遅れに感じますが、それでも独自のファンがいます。誰かがRJSをPHPに移植したかどうか興味がありますか?

これは私のために働いています 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);
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top