1

ランダムな AJAX 出力を取得できたので、次のステップとして、データベースからいくつかの有用な値を取得したいと考えています。

繰り返しますが、私の AJAX 呼び出しは次のようになります (さらに、JSON 呼び出しを追加しました。これはさらに優れています)。

        
        $.ajax({
              url: "index.php",
              data: "tx_myext_myplugin1[controller]=Mycontroller1&tx_myext_myplugin1[action]=ajax&type=89657201",
              success: function(result) {
                alert(result);
              }
            });

    /*
    var uri = '<f:uri.action action="ajax" controller="Mycontroller1" pageType="89657201" />';

    jQuery.getJSON(uri, function(result) {
        alert(result.c);
    });
    */

        

私の ajaxAction 関数:

        
        public function ajaxAction() {
        $arr = array ('a'=>1,'b'=>2,'c'=>3,'d'=>4,'e'=>5);

        return json_encode($arr);
    }
        

これは、JSON 呼び出しを使用すると機能しますが、データベース値を含む配列を取得する必要があります。findAll() 関数を使用してリポジトリを呼び出すと、すでに役立つと思いましたが、配列ではないため、使用できません。別のアイデアは、モデルに記述した getValue メソッドを使用することですが、これが役立つかどうかはわかりません。

4

1 に答える 1

2

免責事項: 通常、findAll()メソッドの使用は現実的である可能性があるperformance killerため、特にモデルが大きい場合や多くの関係が含まれている場合は、必要なプロパティのみを選択してカスタムファインダーを作成してみてください。

json_encode()でfindAll()の結果を送信できるので、十分に近いですが、モデルによっては、findAllから作成されたjsonが非常に大きくなる可能性があることに注意してください。結果を繰り返し、必要な値のみを新しい配列に書き換えることをお勧めします。

    $dataFromRepo = $this->yourRepository->findAll();

    $resultArray = array();

    foreach ($dataFromRepo as $object){
        $resultArray[$object->getUid()] = $object->getTitle();
    }

    return json_encode($resultArray);

結果として、基本的なJSONを取得しますobject

{
    "1": "Title of first item",
    "2": "Second item",
    "3": "Et cetera"
}

からカスタムインデックスを削除する場合$resultArray

    foreach ($dataFromRepo as $object){
        $resultArray[] = $object->getTitle();
    }

JSONを取得しますarray

[
    "Title of first item",
    "Second item",
    "Et cetera"
]

等々。もちろん、この方法でビルドしmultidimensional array、より洗練されたオブジェクトを送信して、必要なものをすべて一度に取得することもできます。

PSJsonLintの例を常に使用してみてください-期待する出力が有効かどうかを検証するためのオンラインバリデーター。

于 2012-05-23T14:03:42.380 に答える