gpt4 book ai didi

javascript - 来自 ajax 调用的 symfony 中的表单验证

转载 作者:可可西里 更新时间:2023-11-01 01:58:23 25 4
gpt4 key购买 nike

我需要通过 ajax 调用 symfony 存储表单中的数据,不要更新浏览器。此外,如果字段中出现错误,我需要您以某种方式获取它们以响应 Ajax 调用并显示我的表单错误,所有这些都无需刷新页面。

我有一个带有 symfony Assets 的表单来验证字段,并在执行 ajax 调用、存储数据或更新显示错误的页面时使一切变得完美,但我需要同样的东西而不刷新页面。

然后我放一些我正在使用的代码:

Controller :

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;
});

我见过一些从 Controller 返回 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 来解决这个问题,我将永远感激不尽,因为对于我看过的许多手册,我仍然没有很好地理解它。

非常感谢您。

最佳答案

我可以与您分享我在旧项目中使用的自定义解决方案,用于管理通过 ajax 调用提交的表单上的错误。

在 Controller Action 中:

 ....
if ( $request->isXmlHttpRequest() ) {

if (!$form->isValid()) {
return array(
'result' => 0,
'message' => 'Invalid form',
'data' => $this->getErrorMessages($form)
);

// Do some stuff
return array(
'result' => 1,
'message' => 'ok',
'data' => ''
}

}
// Generate an array contains a key -> value with the errors where the key is the name of the form field
protected function getErrorMessages(\Symfony\Component\Form\Form $form)
{
$errors = array();

foreach ($form->getErrors() as $key => $error) {
$errors[] = $error->getMessage();
}

foreach ($form->all() as $child) {
if (!$child->isValid()) {
$errors[$child->getName()] = $this->getErrorMessages($child);
}
}

return $errors;
}

js代码是这样的:在客户端:

        $.ajax({
url: ...,
data: ....,
type: "POST",
success: function(data) {
if(data.result == 0) {
for (var key in data.data) {
$(form.find('[name*="'+key+'"]')[0]).before('<ul class="errors"><li>'+data.data[key]+'</li></ul>');
}
} else {
// Submit OK
}
}
});

希望对你有帮助

关于javascript - 来自 ajax 调用的 symfony 中的表单验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34066421/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com