【问题标题】:Symfony2 ajax: parametre + form ,binding errorSymfony2 ajax:参数+表单,绑定错误
【发布时间】:2014-10-28 00:00:59
【问题描述】:

我使用带有 ajax 的 Symfony 2。我有 1 个表单,当我点击时,我可以通过 ajax 发送表单。我想发送 2 个变量:

示例:ajax:

$.ajax({
url : "{{path('lcv_acceuil_form')}}",
type : "POST",
dataType : 'html',
data:
{
msg:    'form',
datas:  $('form#recherche').serialize()
},
cache:false,
success : function() ...

控制器:

public function formAddAction()
{
        $entity = new FormA();
        $form = $this->createForm(new FormAType(),$entity);

        $request = $this->get('request');
        $em = $this->getDoctrine()->getManager();
        if($request->getMethod()=='POST')
        {
            if($request->isXmlHttpRequest())
                {
                    if ($request->request->get('msg') == "msg")
                    {
                      return (new Response('Msg')); 
                    }
                     else if ($request->request->get('msg') == "form")
                    {
                     $form->bind($request);
                     $em->persist($entity);
                     $em->flush();

                     return (new Response('Form added')); 
                    }
                else
                {
                    return (new Response('Its not Good!!')); 
                }
            }
    return (new Response('End'));

    }
        return $this->render('LCVAcceuilForm:Pages:formmanagement.html.twig',
         array('entity'=>$entity,'form'=>$form->createView()));
}

绑定有问题!! 我的实体是空的... 当我通过 $('form#recherche').serialize() (只有一个变量)更改我在 ajax 中的“数据”时,它的工作。

我的错误在哪里??

【问题讨论】:

  • 我解决了一个问题,即更改数据:{ msg: 'form', datas: $('form#recherche').serialize() }, by data:$('form#recherche') .serialize() + '&msg=form',

标签: ajax forms symfony post


【解决方案1】:

您所要做的就是在 Controller 中正确读取表单数据。例如,如果您的 FormA 实体具有属性(还有 getter 和 setter):

  • 姓名

你必须这样做:

public function formAddAction()
{
$entity = new FormA();
$form = $this->createForm(new FormAType(),$entity);

$request = $this->get('request');
$em = $this->getDoctrine()->getManager();
$form->handleRequest($request);
if($request->getMethod()=='POST')
{
    if($request->isXmlHttpRequest()) {
        $data = $form->getData();
        if ($request->request->get('msg') == "msg") {
            return (new Response('Msg')); 
        } elseif ($request->request->get('msg') == "form") {
            $entity->setName($form['name']);
            $entity->setSurname($form['surname'])
            $em->persist($entity);
            $em->flush();
        }
    }

    return new Response('Success');
}

return $this->render('LCVAcceuilForm:Pages:formmanagement.html.twig',
    array('entity'=>$entity,'form'=>$form->createView())
);

}

你的 ajax 应该是这样的:

$.ajax({
    url : "{{path('lcv_acceuil_form')}}",
    type : "POST",
    dataType : 'html',
    data: $('form#recherche').serialize(),
   cache:false,
    success : function() ...

如果您的FormAType 表单名称是例如:formA 在 twig 中,您必须显示具有正确表单名称和字段名称的输入。这应该是这样的:

<input type="text" name="formA[name]"/>
<input type="text" name="formA[surname]"/>
<input type="hidden" name="msg" value="test"/>

当然,您的FormAType 应该具有上述字段。

【讨论】:

  • 它不起作用!我不想创建隐藏的输入。我想更改“味精”。例如:如果 msg="form",控制器知道它的表单,如果 msg “完成”,控制器将通过提供更多信息来回复。
【解决方案2】:

我认为您的数据打包不正确。

首先收集表单数据,然后添加msg item:

var data = $('form#recherche').serializeArray();
data['msg'] = 'form';

然后:

....
data: data
....

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-03-12
    • 1970-01-01
    • 2023-03-07
    • 2016-04-01
    • 2017-10-16
    • 2011-10-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多