編集
SOに関する多くの質問は、Ajax(これは非常に人気があります)を介したフォーム送信に関するものですが、ajax呼び出しを介したフォームの表示方法に関するものではありません。
私の質問は太字の部分についてです:ユーザーがフォームを要求します-> ajaxCall->displayForm- >ユーザーがフォームを送信します->フォームをコントローラーに送信します->フォームを検証します->ユーザーに応答を送信します(エラーかどうか)。
質問
POSTであるajax呼び出しは、ajax呼び出しを行うときに$request->isMethod('POST')
常に戻りますtrue
。したがって、ajax呼び出しを介して新しいフォームが要求されている場合、そのフォームは常に検証されます。以下のコードを同封しました。フォームは正常に表示されますが、次のエラーメッセージがフォームに表示されます。
CSRFトークンが無効です。
問題は、コントローラーでのフォームのajax呼び出し要求中にフォームが検証されていることです。
ちなみに、フォームの送信はうまく機能し、検証もうまく機能します。
空白の新しいフォームを検証せずにAjaxを介してフォームを表示する方法を知っている人はいますか?
これまでの私のコード:
/**
* Display the message as well as the form to reply to that message
*
* @param Request $request
* @return Response
*/
public function viewMessageAction(Request $request)
{
//Forbid every request but jQuery's XHR
if (!$request->isXmlHttpRequest()){
return new Response('', 200, array('Content-Type' => 'application/json'));
}
//Retrieve the message from the request
$messageId = $request->request->get('messageId');
$message = $this->getMessageManager->getMessage($messageId);
//Creates the form to reply to the message
$form = $this->container->get('reply_form.factory')->create($message);
if ($request->isMethod('POST')) {
$form->bind($request);
if ($form->isValid()) {
//...
return $this->redirect($this->generateUrl('task_success'));
}
}
$answer =$this->container->get('templating')->renderResponse('AcmeMessageBundle:Message:message.html.twig', array(
'form' => $form->createView(),
'message' => $message
));
$response = new Response();
$response->headers->set('Content-type', 'application/json; charset=utf-8');
$response->setContent(json_encode($answer));
return $response;
}
編集:jQueryの部分:
<script type="text/javascript">
$(function(){
var myPath = ;//...
function getMessage(messageId){
$.ajax({
type: "POST",
url: myPath,
data: "messageId="+messageId,
success: function(returnData){
$('#message').html(returnData);
}
});
}
});
</script>