javascript - 带有 ajax 和 knpPaginatorBundle 的 symfony 过滤器
问题描述
我使用 ajax 过滤返回的数据。
在后端,我使用 Symfony 和 KnpPaginatorBundle。
现在,当我在没有过滤器的情况下显示数据和分页并且它可以工作并且当我在分页中单击第 2 页时。
例如,它也可以工作,但是当我使用 ajax 过滤时也可以工作,但是当我在分页中单击按钮 2 时,它会移动到没有过滤器的分页的第 2 页
例如,如果我使用 name = "david" 进行过滤,则返回的数据为 true 并且显示为 true,但是当我在第 2 页中单击进行分页时,我将移至不带过滤器的第 2 页(我获取不带过滤器的第 2 页的数据)
代码 sf:
/**
* @Route({
* "fr": "/list",
* "de": "/list",
* "en": "/list"
* } , options = { "expose" = true } , name="front.babysitter.list", methods={"GET"})
*
* @param Request $request
*/
public function list(Request $request){
$this->urls_intl = $this->getCurrentUrl("front.babysitter.list",[]);
$form = $this->createForm(BabySitterFrontSearchType::class, null);
if(empty($request->query->all())){
$listBabySitters = $this->babySitterRepository->findBy(['status' => 1]);
} else {
$listBabySitters = $this->babySitterRepository->findBabySitter($request->query->get("babysitter_search"));
}
$listBabySittersPaginate = $this->paginator->paginate(
$listBabySitters,
$request->query->get('page', 1),
$this->paginate
);
return $this->render('babysitter/list.html.twig',[
'listBabySitters' => $listBabySittersPaginate,
'form' => $form->createView()
]);
}
代码库:
public function findBabySitter($searchQuery, $distance = 10): array
{
$query = $this->createQueryBuilder('b')
->where('b.status = 1');
if (isset($searchQuery['spokLanguage']) && $searchQuery['spokLanguage']){
$query
->join('b.spokLanguages','sp')
->andWhere('sp.language in ( :language_id )')
->setParameter('language_id', $searchQuery['spokLanguage'])
;
}
}
//just example for filter
代码js:
var searchBabySitters = function(){
$("#ajax-form-search-babysitter").on('submit', function () {
$('.loading').show();
history.pushState(null, null, window.location.href+'?'+$('#ajax-form-search-babysitter').serialize());
$.ajax({
url: Routing.generate("front.babysitter.filter"),
type: "POST",
headers: { "cache-control": "no-cache" },
async: false,
cache: false,
data: $(this).serialize(),
success: function (XMLHttpRequest){
$('.loading').hide();
$('.list').html(XMLHttpRequest);
},
error: function (XMLHttpRequest, textStatus) {
if (textStatus !== 'abort')
{
var error = "TECHNICAL ERROR: unable to send login informations \n\nDetails:\nError thrown: " + XMLHttpRequest + "\n" + 'Text status: ' + textStatus;
$.growl.error({ message: error});
return false;
}
},
complete : function () {
}
});
return false;
})
};
解决方案
问题是您检查查询字符串但POST
通过 ajax 发送请求。
您需要更改if(empty($request->request->all())){
ajax$request->request->get("babysitter_search")
请求。或发送GET
请求
正确的方法是从表单数据中获取数据,而不是从请求中获取数据:
$form = $this->createForm(BabySitterFrontSearchType::class, null, [
'method' => 'POST', // or GET
]);
$form->handleRequest($request);
if ($form->isSubmitted() && $form->isValid()) {
$data = $form->getData();
$listBabySitters = $this->babySitterRepository->findBabySitter($data["babysitter_search"]);
} else {
$listBabySitters = $this->babySitterRepository->findBy(['status' => 1]);
}
同样在您的javascript中,您需要使用data: $(this).serializeArray()
推荐阅读
- java - 错误:java.lang.NoClassDefFoundError:无法初始化类 org.apache.axis.description.OperationDesc
- c++ - 将 C++ 中的多个参数传递给 MatLab 共享库函数
- flutter - 如何使用 api post 方法发送文件?
- android - 如何使 Android 应用程序与盲文提示兼容?
- maven - Getting a java.lang.IllegalArgumentException when updating cucumber-groovy version in POM file
- javascript - 组件不能异步工作
- java - Android Toast Maketext 函数进入错误的循环器
- javascript - How to solve the error " Can not read property 'top' of null "?
- mysql - Workaround for Subquery returns more than 1 error
- ubuntu - 无法在 Ubuntu 上为 PHP 7.3 安装 PHP-GD