web-dev-qa-db-ja.com

symfony2コントローラーによるAjaxポストリクエストの取得方法

このようなテキストメッセージを送信します

htmlマークアップ

<textarea id="request" cols="20" rows="4"></textarea>

javaScriptコード

var data = {request : $('#request').val()};

$.ajax({
    type: "POST",
    url: "{{ path('acme_member_msgPost') }}",
    data: data,
    success: function (data, dataType) {
        alert(data);
    },
    error: function (XMLHttpRequest, textStatus, errorThrown) {
        alert('Error : ' + errorThrown);
    }
});

symfony2コントローラーコード

$request = $this->container->get('request');
$text = $request->request->get('data');

だが $text 無効である ...

Firefox http request testerによる通常の投稿リクエスト(Ajaxではない)を試しました。

/app_dev.php/member/msgPost

コントローラは動作し、$textには値があります。

だから私はPHPコードはOKだと思う、Ajax側に問題があるが、

'success:function'は、成功したかのように呼び出されます。

Javascriptデータ構造のコンテンツを取得するにはどうすればよいですか?

21
whitebear

まず、コントローラーは既にContainerAwareを実装しているため、コントローラーのコンテナーにアクセスする必要はありません。

基本的に、コードは_Controller.php_で次のようになります。

_public function ajaxAction(Request $request)
{
    $data = $request->request->get('request');
}
_

また、アプリケーションのJSでconsole.log(data)を使用して、送信するデータがnullでないことを確認してください。

そして最後に質問の答え:適切な変数を使用していないため、$('#request').val()の値にアクセスする必要がありますが、request変数に格納しますコントローラーでdata変数名を使用しました。

混乱を招くため、変数の名前を変更することを検討してください。

27
sf_tristanb

データをJSONとして送信する場合(urlencoded形式ではなく)、リクエスト本文に直接アクセスする必要があります。

$data = json_decode($request->getContent());
22

値を取得するときに間違っているため、使用する必要があります:

$data = $request->request->get('request');

'cause requestはパラメーターの名前です。

3
mangel.snc