6

問題

フォームを使いやすくするためにAJAX応答をいじることができるように、AJAX応答を取得しようとしています。コントローラ(以下のコード)にで通常の応答を返すようvar_dump()にすると、オブジェクトの出力が得られるので、クエリが間違っていないことがわかります(ID 1を使用してデバッグするクエリを使用しています)。ただし、で出力を返すとjson_encode()、空のJSONファイルが返されます。

ビュー内のHTMLフォーム

<div id="content">
    <form id="myForm" action="{{path('snow_ajax')}}" method="POST" >
        Write your name here:
        <input type="text" name="name" id="name_id" value="" /><br />
        <input type="submit" value="Send" />
    </form>
</div>

同じビューのスクリプト

<script type="text/javascript">
    $(document).ready(function() {

        $("#myForm").submit(function(){
            var url=$("#myForm").attr("action");

            $.post(url,{
                formName:"ajaxtest",
                other:"attributes"
            },function(data){

                if(data.responseCode==200 ){
                    alert("Got your json!");
                }
                else{
                    alert("something went wrong :(");
                }
            });
            return false;
        });
    });
</script>

通常の応答のコントローラー(動作)

public function ajaxAction()
{

    $location = $this->getDoctrine()->getRepository('SnowFrontBundle:Location')
        ->find(1);

    $output = var_dump($location);

    return $output;
}

AJAX応答のあるコントローラー(機能せず、空のJSONを返します)

public function ajaxAction()
{

    $location = $this->getDoctrine()->getRepository('SnowFrontBundle:Location')
        ->find(1);

    return new Response(json_encode($location), 200);
}

誰かがここで私を助けてくれませんか?これは私を狂わせています!

4

4 に答える 4

5

Doctrine2のエンティティマネージャーを使用して結果を配列で取得することで修正し、その後、JSONにエンコードしました。これが最もクリーンな方法であるかどうかはわかりませんが(getEntityManager()は私のIDEによると非推奨のようです)、今のところ正常に機能します。

public function ajaxAction()
{
    $em = $this->getDoctrine()->getEntityManager();
    $query = $em->createQuery('SELECT l FROM Snow\FrontBundle\Entity\Location l WHERE l.id=:id');
    $query->setParameter('id', 1);
    $result = $query->getArrayResult();

    return new Response(json_encode($result), 200);
}
于 2013-01-19T11:55:09.883 に答える
2

これはjson_encode()、オブジェクト(以外StdClass)をJSONにシリアル化する方法がわからないために発生しています。これを解決するには、少なくとも2つの方法があります。

  1. PHP 5.4以降を使用している場合は、オブジェクトを実装することができます。これは、オブジェクトJsonSerializableを呼び出すときにPHPが使用しjson_encode()ます。
  2. PHP 5.3以前を使用している場合は、SymfonyのSerializerコンポーネントを使用して、さまざまなメソッドを使用してオブジェクトをJSONに変換できます。ドキュメントがかなり明確なので、それを正確に行う方法については説明しません。
于 2013-03-07T05:10:34.073 に答える
-1

コード例:

$entity = // Get some entity
$result = array(
    'id' => $entity->getId(),
    'name' => $entity->getName()
);

return new Response(json_encode($result));
于 2013-01-20T08:03:40.810 に答える
-1

データを取得する場合は、クエリリポジトリ(dsl)を使用し、$query変数でgetArrayResult()メソッドを使用する必要があります。これにより、配列を直接取得できます。

于 2015-10-20T05:42:30.587 に答える