编辑
关于 SO 的许多问题都是关于通过 Ajax 提交表单(这个非常流行),而不是关于如何通过 ajax 调用显示表单。
我的问题是关于粗体部分:用户要求表单 -> ajaxCall -> displayForm -> 用户提交表单 -> 将表单发送到控制器 -> 验证表单 -> 向用户发送响应(错误与否)。
问题
ajax 调用是一个 POST,在进行 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>