Symfony 表单和 Ajax

问题描述

我正在开发 Symfony 4.4。

要刷新表格,用户可以通过输入选择三个选项:

  • 进行中
  • 完成
  • 全部

然后他们必须按下验证按钮。

我想通过自动刷新表格来改进此页面的使用。

目前在我的模型上,我有 AJX,它允许我检索条目的值:

   <script>
    $(document).on('change','#campagnes_tel_isAttending',function () {
        $('#flash').remove();
        let $field = $(this)
        let $preselect = $('#campagnes_tel_isAttending')
        let $form = $field.closest('form')
        let data = {}
        data[$field.attr('name')] = $field.val()
        console.log(data)
        // On soumet les données
        // $.post($form.attr('action'),data).then(function (data) {
        //     // On récupère le nouveau <select>
        //     $('#planningsms_client_label').val($(data).find('#planningsms_client option:selected').text());
        //     let $input = $(data).find(target)
        //     // On remplace notre <select> actuel
        //     $(target).replaceWith($input)
        // })
    });
</script>

我现在卡住了,因为我不知道如何将信息返回到我的控制器,允许我使用输入值修改 PreSelect 变量并更改 sql 查询的结构。

创建路线?在 Ajax POST 中调用路由? 在我的控制器中使用此路由?

我认为或多或少是这样,但另一方面我不知道如何实现它。

编辑:

它已经向前移动了一点。

我设法恢复了控制器中输入更改的数据。

另一方面,我尝试回忆允许我使用所选过滤器进行新 sql 查询函数,但这似乎不起作用。

阿贾克斯:

    <script>
        $(document).on('change',function () {
            $('#flash').remove();
            let $field = $(this)
            let $preselect = $('#campagnes_tel_isAttending')
            let $form = $field.closest('form')
            let data = {}
            data['isAttending'] = $field.val()
            console.log(data)
            $.ajax({
                type: "POST",url: "/campagnestel/ajax",data: data,dataType: "json",success: function(response) {
                    console.log(response);
                }
            });
        });
    </script>

并在我的控制器中运行:

    /**
     * @Route("/ajax",methods={"GET","POST"})
     */
    public function testAjax(Request $request)
    {
        if (!$request->isXmlHttpRequest()) {
            return new JsonResponse(array(
                'status' => 'Error','message' => 'Error'),400);
        }

        if(isset($request->request)) {
            $preSelect = $request->request->get('isAttending');

            return $this->queryFollowingFilter($preSelect);
        }

//        return $this->queryFollowingFilter($preSelect);
        return  new JsonResponse(array(
        'status' => 'OK'),200);

    }

错误

The controller must return a "Symfony\Component\HttpFoundation\Response" object but it returned an array

解决方法

如错误消息所述:

控制器必须返回一个“Symfony\Component\HttpFoundation\Response”对象

JsonResponse 满足该要求并满足您的需求。试试这个:

    if($request->request->has('isAttending')) {
        $preSelect = $request->request->get('isAttending');

        return new JsonResponse(
          $this->queryFollowingFilter($preSelect),200
        );
    }