克鲁德ajax jQuery symfony3将无法正常工作 - javascript

问题:如何在不刷新页面的情况下验证表单并在模式框中返回验证消息。

我刚开始学习Symfony 3,但在使用AJAX添加数据时遇到了麻烦。
我知道如何在模态框内包含模板表单,但是我不知道如何在模态框内显示$ form-> isValid()的错误消息并将其持久化。

new.html.twig

更新:我现在可以在Controller中调用方法操作。但是,当我验证表单时,模态框内没有收到任何验证错误。

<script>
    $(function () {
        $('.withdropdown').dropdown();
        $('.add-company-launch').modal();

        $('#company-form').submit(function(e) {

            var formUrl = "{{ path('monteal_backend_company_ajax') }}";
            var formData = new FormData(this)

            $.ajax({
                url: formUrl,
                type: 'POST',
                data:  formData,
                 contentType: false,
                 cache: false,
                processData: false,
                success: function(data, textStatus, jqXHR)
                {
                    if(data['status'] === 'success'){
                        alert('success');
                    } else {
                        $('#add-company').html(data['html']);
                    }
                },
                error: function(jqXHR, textStatus, errorThrown)
                {
                }
            });

            e.preventDefault();
        });
    })
</script>

{%endblock%}

CompanyController.php

更新:我已经为AJAX创建了两种方法,
1.处理表格的方法。
2. AjaxHandler。

   public function newAction() {

        $company = new Company();

        $form = $this->createForm(CompanyForm::class, $company);

        return $this->render('Admin/Backend/Company/new.html.twig', array(
            'form'=>$form->createView()
        ));
    }

    public function ajaxAction(Request $request) {

        if (!$request->isXmlHttpRequest()) {
            return new JsonResponse(array('message' => 'You can access this only using Ajax!'), 400);
        }

        $company = new Company();
        $form = $this->createForm(CompanyForm::class, $company);
        $form->handleRequest($request);

        if ($form->isValid()) {

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

            return new JsonResponse(array(
                'status' => 'success'), 200
            );
        }

        $html = $this->renderView("Admin/Backend/Company/new.html.twig", array(
            'form' => $form->createView())
        );

        return new JsonResponse(['status' => 'error', 'html' => $html]);
    }

参考方案

1-在newAction中,只需创建表单并将视图(createView)传递到模板即可。

2-编写ajaxFormHandlerAction并在此处创建表单,对其进行处理,对其进行验证,在一个变量中呈现视图:
$ html = $ this-> renderView('yourTemplate.html.twig',array($ form-> createView()));
编辑:当然,您的ajax必须将表单发布到新的ajax url中。

3-如果未通过验证
返回一个JsonResponse(array('html'=> $ html,'status'=>'error'));
如果验证
返回一个JsonResponse(array('status'=>'success'));

4-在ajax成功回调中,如果状态错误,则呈现新表单。
如果状态成功,重定向或其他

希望有帮助

编辑:

对于您的控制者来说是这样的:

    use Symfony\Component\HttpFoundation\JsonResponse;
    public function ajaxFormHandlerAction(Request $request) 
    {
        $company = getYourCompany(); //get it from db?
        $form = $this->createForm(CompanyForm::class, $company));
        $form ->handleRequest($request);
        if($form ->isValid()){
             //do whatever you want, maybe persist, flush()
             return new JsonResponse(array(
                'status' => 'success'));
        }
        $html = $this->renderView("yourModalTemplate.html.twig", array('form' => $form->createView()));
        return new JsonResponse(['status' => 'error', 'html' => $html]);
     }

在成功的ajax回调中:

success: function(data, textStatus, jqXHR)
{
    if(data['status'] === 'success'){
        alert('success');
        // maybe redirect the user ???
    }else if(data['status' === 'error']){
        $('#idOfYourModal').html(data['html']); //assuming you use jquery, or translate to javascript
    }
},

您必须创建一个仅包含模态内部的树枝模板...

jQuery val函数在隐藏字段上不起作用? - javascript

这是我的HTML代码:<div style='display:none;' id='allformid'> <div> <form action='#'> <input type='text' name='name' …

jQuery ajax发布电子邮件字段 - javascript

我不确定为什么我无法发布电子邮件字段的内容,这是我的代码。<html> <head> <title></title> <script src="//code.jquery.com/jquery-1.11.2.min.js"></script> </head>…

Python返回jsonp自动完成 - javascript

我正在使用devbridge https://www.devbridge.com/sourcery/components/jquery-autocomplete/的自动完成功能。我正在尝试在同一服务器内但在不同端口中获取json数据。所以我对跨域有问题。我已经尝试并阅读了有关此问题的许多不同方法,但是我无法设法解决它。所以我有一个python函数返回此:fo…

如何使HTML页面在加载时选择随机标题? - javascript

我是Web开发的新手,似乎无法在此站点的任何地方找到此特定任务,只能找到与使用页面时动态更改有关的内容。基本上,我希望我的html文档中的标记内容在加载/刷新页面时始终是不同的;我想在JS中存储某种类型的字符串数组,并让页面在加载html时选择其中一个字符串插入标签中。这将导致每次我刷新页面时,选项卡上的标题都是不同的,除非再次刷新,否则不会更改。谁能指出我…

粗糙的Unicode->没有CLDR的语言代码? - javascript

我在写字典应用。如果用户键入Unicode字符,我想检查该字符是哪种语言。例如字 - returns ['zh', 'ja', 'ko'] العربية - returns ['ar'] a - returns ['en', 'fr', …