Мне нужно сохранить данные из формы с помощью symfony через ajax, чтобы я не обновил браузер. Кроме того, я нуждаюсь в вас в случае ошибок в полях, может каким-то образом получить их в ответ на этот вызов 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 call: (я не понимаю, как обрабатывать часть ошибки)
$('.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 для решения этой проблемы, я бесконечно благодарен, потому что для многих руководств, которые я видел, я до сих пор не понимаю этого.
Спасибо вам заблаговременно.