【问题标题】:Symfony form AJAX return empty objectSymfony 表单 AJAX 返回空对象
【发布时间】:2017-08-25 10:47:59
【问题描述】:

我正在尝试使用 Symfony 创建 AJAX 表单,但我的表单返回空对象。当我发送手动编写的文本或数组时,一切正常。错误在哪里?我的表单或javascript代码有问题是问题吗?

/**
* Renders the "new" form
* 
* @Route("/", name="demo_new")
* @Method("GET")
*/
public function newAction(Request $request) {
    $entity = new Demo();
    $form = $this->createForm(DemoType::class, $entity);

    return $this->render('default/new.html.twig', array(
            'entity' => $entity,
            'form' => $form->createView()
            )
    );
}

/**
*
* @Route("/", name="demo_create")
* @Method("POST")
*
*/
 public function createAction(Request $request) {
if (!$request->isXmlHttpRequest()) {
  return new JsonResponse(array('message' => 'You can access this only using Ajax!'), 400);
}

$entity = new Demo();
$form = $this->createForm(DemoType::class, $entity, array(
    'action' => $this->generateUrl('demo_create'),
    'method' => 'POST',
));

$form->handleRequest($request);

if ($form->isSubmitted() && $form->isValid()) {
  $data = $form->getData();
  return new JsonResponse(
          [
            'message' => 'Success!',
            'data' => $data 
          ], 200);
}

$response = new JsonResponse(
        array(
    'message' => 'Error',
    'form' => $this->renderView('default/new.html.twig', array(
        'entity' => $entity,
        'form' => $form->createView(),
    ))), 400);
return $response;
 }
}

和 Javascript 代码:

  function initAjaxForm()
    {
    $('body').on('submit', '.ajaxForm', function (e) {

    e.preventDefault();

    $.ajax({
        type: $(this).attr('method'),
        url: $(this).attr('action'),
        data: $(this).serialize()
    })
    .done(function (data) {
        if (typeof data.message !== 'undefined') {
            console.log(data.data);
            console.log(data.message);
        }
    })
    .fail(function (jqXHR, textStatus, errorThrown) {
        if (typeof jqXHR.responseJSON !== 'undefined') {
            if (jqXHR.responseJSON.hasOwnProperty('form')) {
                $('#form_body').html(jqXHR.responseJSON.form);
            }

            $('.form_error').html(jqXHR.responseJSON.message);

        } else {
            alert(errorThrown);
        }

    });
});
}

【问题讨论】:

  • “我的表单返回空对象”。你的意思是$(this).serialize() 是空的?或者 PHP 代码的响应是空的?请你能准确说明问题出在哪里。

标签: javascript php ajax forms symfony


【解决方案1】:

今天 2.8 版也有同样的问题,如果它最终治愈了其他人,我将把它留在这里,我已将它添加到我的表单构建器中

/**
 * {@inheritdoc}
 */
public function getBlockPrefix()
{
    return '';
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-09-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多