Symfony 表单和 Ajax
Posted
技术标签:
【中文标题】Symfony 表单和 Ajax【英文标题】:Symfony form & Ajax 【发布时间】:2021-04-06 20:52:36 【问题描述】:我正在开发 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', '#campagnes_tel_isAttending', 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
【问题讨论】:
【参考方案1】:如错误消息所述:
控制器必须返回一个“Symfony\Component\HttpFoundation\Response”对象
JsonResponse
满足该要求并满足您的需求。试试这个:
if($request->request->has('isAttending'))
$preSelect = $request->request->get('isAttending');
return new JsonResponse(
$this->queryFollowingFilter($preSelect),
200
);
【讨论】:
谢谢!它可以工作,另一方面,我的控制台中有数据,但刷新页面时无法显示它们。抱歉,我真的是从 Ajax 开始的。以上是关于Symfony 表单和 Ajax的主要内容,如果未能解决你的问题,请参考以下文章