【发布时间】:2016-03-08 02:12:35
【问题描述】:
我需要通过 ajax 存储来自 symfony 表单的数据,调用我不要更新浏览器。此外,如果字段中出现错误,我需要您以某种方式让它们响应该调用 Ajax 并显示我的表单错误,所有这些都无需刷新页面。
我有一个带有 symfony 资产的表单来验证字段,并在执行 ajax 调用、存储数据或更新显示错误的页面时使一切变得完美,但我需要同样的东西而不刷新页面。
然后我放了一些我正在使用的代码:
控制器:
public function createAction(Request $request)
{
$entity = new Student();
$form = $this->createCreateForm($entity);
$form->handleRequest($request);
if ($form->isValid()) {
$em = $this->getDoctrine()->getManager();
$em->persist($entity);
$em->flush();
return $this->redirect($this->generateUrl('student_show', array('id' => $entity->getId())));
}
return $this->render('BackendBundle:Student:new.html.twig', array(
'entity' => $entity,
'form' => $form->createView(),
));
}
ajax调用:(我不明白如何处理错误部分)
$('.form_student').submit(function(event) {
event.preventDefault();
$.ajax({
type: 'POST',
url: Routing.generate('student_create'),
data: $(this).serialize(),
success: function(data) {
//clean form
cleanForm($(this));
//show success message
$('#result').html("<div id='message'></div>");
$('#message').html("<h2> student created</h2>").hide();
$('#message').fadeIn('slow').delay(5000).fadeOut('slow');
event.stopPropagation();
},
error: function (xhr, desc, err)
{
alert("error");
}
})
return false;
});
我看到一些从控制器返回 JsonResponse 并使用 Ajax,但我是从 Ajax 开始的,我不知道如何使用它。然后我把我的意思的代码:
if ( $request->isXmlHttpRequest() ) {
if ($form->isValid()) {
//...
return new JsonResponse(array('message' => 'Success!'), 200);
}
$response = new JsonResponse(array(
'message' => 'Error',
'form' => $this->renderView('BackendBundle:student:new.html.twig',
array(
'entity' => $entity,
'form' => $form->createView(),
))), 400);
return $response;
}
如果您能帮助我更多地了解如何使用 Ajax 来解决这个问题,我将永远感激不尽,因为对于我看过的许多手册我仍然不太了解。
非常感谢您。
【问题讨论】:
标签: javascript php jquery ajax symfony