我正在开发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查询,但似乎不起作用。
Ajax:
<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 "SymfonyComponentHttpFoundationResponse" 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
);
}