Json 无法在Symfony中进行Ajax调用

Json 无法在Symfony中进行Ajax调用,json,ajax,symfony,Json,Ajax,Symfony,我想通过ajax调用处理用户注册。因此,我创建了一个注册类(定义为服务),它将加载到不同的控制器中: public function loadRegisterForm($request) { $user = new User(); $form = $this->createForm(RegistrationType::class, $user, array('attr' => array('class' => 'ajaxRegist

我想通过ajax调用处理用户注册。因此,我创建了一个注册类(定义为服务),它将加载到不同的控制器中:

   public function loadRegisterForm($request)
    {
        $user = new User();
        $form = $this->createForm(RegistrationType::class, $user, array('attr' => array('class' => 'ajaxRegisterForm',)));
        $form->handleRequest($request);

        $errors = "";

        $parametersArray['result'] = "";

        if ($form->isSubmitted())
        {
            if ($form->isValid())
            {
                $password = $this->get('security.password_encoder')
                    ->encodePassword($user, $user->getPlainPassword());
                $user->setPassword($password);

                $user->setIsActive(1);
                $user->setLastname('none');

                $em = $this->getDoctrine()->getManager();
                $em->persist($user);
                $em->flush();


                $parametersArray['result'] = new JsonResponse(
                    array(
                        'message' => 'Success! User registered!',
                        'result'  => $this->renderView('ImmoBundle::security/successlogin.html.twig')
                    ), 400);
            }
            else
            {
                $errors = $this->get('validator')->validate($form);

                $parametersArray['result'] = new JsonResponse(
                    array(
                        'message' => 'Failure! User not registered!',
                        'result'  => $this->renderView('ImmoBundle::security/successlogin.html.twig'),
                        'errors'  => $errors,
                    ), 200);
            }
        }

        $parametersArray['register_form'] = $form;
        $parametersArray['errors'] = $errors;

        return $parametersArray;
    }
然后我创建了一个主控制器,其中正在加载注册表:

    /*
     * @Route("/", name="MainPageNotPaginated")
     */
    public function indexAction(Request $request)
    {
        /**
         * Load register form
         */
        $registerForm = $this->get('register_form_service');
        $registerFormParameters = $registerForm->loadRegisterForm($request);

        return $this->render(
            'ImmoBundle::Pages/mainPage.html.twig',
            array(
                'register_form'  => $registerFormParameters['register_form']->createView(),
                'errors'         => $registerFormParameters['errors'],
                'result'         => $registerFormParameters['result'],
                )
        );
    }
此外,我还在javascript文件中添加了一个ajax调用:

$('.registerFormContainer').on('submit', '.ajaxRegisterForm', function (e) {
        e.preventDefault();

        $.ajax({
                type: $(this).attr('method'),
                url: $(this).attr('action'),
                data: $(this).serialize()
            })
            .done(function (data) {
                if (typeof data.message !== 'undefined') {
                    $('.registerFormContainer').html(data.result);
                }
                alert('success');
            })
            .fail(function (jqXHR, textStatus, errorThrown) {
                if (typeof jqXHR.responseJSON !== 'undefined') {
                    $('.registerFormError').html(jqXHR.responseJSON.result);
                } else {
                    alert("fail");
                }
            });
    });
现在,当我提交登记表而不填写数据(通常会返回错误)时,我收到了一个“成功”警报。提交的注册表有效时,会显示相同的“成功”警报

我试过了

console.log(data.message)

但控制台显示“未定义”


我做错了什么

好的,我已经弄明白了。我刚刚将这一行添加到我的主控制器(不是服务控制器):


您是否为实体字段添加了验证?@redwanabs是的,我添加了。但我不认为验证是这里的问题,因为如果我填写所有字段并提交表单,我会得到相同的警报“成功”窗口(此“成功”消息来自js文件中的行警报(“成功”)。但数据将很好地插入数据库。我认为我返回json对象的方式不对。
if ( $request->isXmlHttpRequest() ) {
    return $registerFormParameters['result'];
}