javascript - crud ajax jquery symfony3 无法工作

标签 javascript php jquery ajax symfony

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

我刚刚开始学习 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>

{% 结束 block %}

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 中,只需创建表单并将 View (createView) 传递给您的模板。

2 - 编写 ajaxFormHandlerAction 并在此处创建表单,处理它,验证它,在变量中渲染 View : $html = $this->renderView('yourTemplate.html.twig', array($form->createView())); 编辑:当然,您的 ajax 必须将表单发布到您新的 ajax url...END 编辑

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

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

希望这有帮助

编辑:

你的 Controller 是这样的:

    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
    }
},

您必须创建一个仅包含模态框的 Twig 模板...

关于javascript - crud ajax jquery symfony3 无法工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43178248/

相关文章:

php - 如何在 PHP 数组中定义自定义键?

jquery - 将对象数组发送到 WCF

java - 以所需格式创建 JSON - Java

php - 如何从提交按钮调用 php 函数?

php - 如何获取数组中同一键的最大值

c# - 异步回发不起作用

javascript - 弃用同步 XMLHttpRequest 错误消息

javascript - 使用json从flickr获取图片,并将所选图片放入我的新div中

javascript - JQUERY/JS/HTML - 滚动到 div 在 JQuery 3.1.1 上不起作用

javascript - Lodash 过滤器忽略大小写