问题描述
我正在开发 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
);
}