如何让jquery返回csrf?

阅读这个Symfony CSRF和Ajax它只返回csrf,但是如何将jQuery返回到表单中?

编辑:我的代码如下:

$formFactory = Forms::createFormFactoryBuilder() ->addExtension(new CsrfExtension($csrfManager)) ->getFormFactory(); $defaultFormTheme = 'bootstrap_3_layout.html.twig'; $vendorDir = realpath(__DIR__.'/../vendor'); $appVariableReflection = new \ReflectionClass('\Symfony\Bridge\Twig\AppVariable'); $vendorTwigBridgeDir = dirname($appVariableReflection->getFileName()); $viewsDir = realpath('twig'); $twig = new Twig_Environment(new Twig_Loader_Filesystem(array( $viewsDir, $vendorTwigBridgeDir.'/Resources/views/Form', ))); $formEngine = new TwigRendererEngine(array($defaultFormTheme), $twig); $twig->addRuntimeLoader(new \Twig_FactoryRuntimeLoader(array( TwigRenderer::class => function () use ($formEngine, $csrfManager) { return new TwigRenderer($formEngine, $csrfManager); }, ))); $twig->addExtension(new FormExtension()); $translator = new Translator('en'); $twig->addExtension(new TranslationExtension($translator)); $form = $formFactory->createBuilder() ->add('task', TextType::class) ->add('dueDate', DateType::class) ->getForm(); $request = Request::createFromGlobals(); $form->handleRequest($request); if ($form->isSubmitted() && $form->isValid()) { $data = $form->getData(); print_r($data); } $twig->display('new.html.twig', array( 'form' => $form->createView(), )); 

然后在我的表单模板中我有:

   $.ajax({ url: "app.php", type: 'POST', data: { form: { _token: "{{ csrf_token('form') }}" } }, });    {{ form_start(form, {'method': 'POST', 'action': 'app.php'}) }} {{ form_row(form.task, {'required': false}) }}  {{ form_end(form, {'render_rest': false}) }} 

当我查看我的源代码时,我看到:

  $.ajax({ url: "app.php", type: 'POST', data: { form: { _token: "Kf1IK4uikxPCxfmjUkDa8vhRiNI4PWS2zdnTIiWyHC4" } }, });  

因此令牌生成但是当我打印调试时,我没有看到_token被发布。 我做错了什么?

您可以按照链接的答案中的描述序列化表单,也可以仅发送令牌

仅限令牌:

 $.ajax({ url: "{{ path('your_edit_route') }}", type: 'POST', data: { form: { _token: "{{ csrf_token('form') }}" } }, }); 

整体forms:

 var data = $('#targetForm').serialize(); $.ajax({ url: "{{ path('your_edit_route') }}", type: 'POST', data: data, });