このようなテキストメッセージを送信します
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データ構造のコンテンツを取得するにはどうすればよいですか?
まず、コントローラーは既にContainerAware
を実装しているため、コントローラーのコンテナーにアクセスする必要はありません。
基本的に、コードは_Controller.php
_で次のようになります。
_public function ajaxAction(Request $request)
{
$data = $request->request->get('request');
}
_
また、アプリケーションのJSでconsole.log(data)
を使用して、送信するデータがnullでないことを確認してください。
そして最後に質問の答え:適切な変数を使用していないため、$('#request').val()
の値にアクセスする必要がありますが、request
変数に格納しますコントローラーでdata
変数名を使用しました。
混乱を招くため、変数の名前を変更することを検討してください。
データをJSONとして送信する場合(urlencoded形式ではなく)、リクエスト本文に直接アクセスする必要があります。
$data = json_decode($request->getContent());
値を取得するときに間違っているため、使用する必要があります:
$data = $request->request->get('request');
'cause requestはパラメーターの名前です。