Json 无法在Symfony中进行Ajax调用
我想通过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
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'];
}