我已经设法接近为我的AJAX过滤器创建分页。唯一的问题是它在点击链接后重置。我需要一种方法让分页记住之前应用的搜索。我能够通过搜索显示正确数量的页面。唯一的问题是当我点击分页链接时它会重置。
我正在使用的代码:
刀片:
@foreach($launchsitesatellite as $satellite)
<div id="main-data">
<div class="table-row" id="launchsatdisplay">
{{$satellite->satname}}
</div>
</div>
@endforeach
{{$launchsitesatellite->links()}}
AJAX呼吁分页:
$(window).on('hashchange',function(){
page = window.location.hash.replace('#','');
getObjects(page);
});
$(document).on('click','.pagination a', function(e){
e.preventDefault();
var page = $(this).attr('href').split('page=')[1];
location.hash = page;
});
function getObjects(page){
$('#default').remove();
$.ajax({
url: '/data/{{$launchsitename->site_code}}?page=' + page
}).done(function(data){
$('#data-holder').html(data);
});
};
PHP功能:
public function ajax(Request $request, $site_code)
{
if ($request->ajax()) {
$launchsitesatellite = DB::table('satellites')
->where(function ($q) use ($request) {
if (empty($request->type)) {
$q->where('country', 'LIKE', '%' . $request->country . '%');
} else {
$q->Where('object_name', 'LIKE', '%'.$request->search.'%');
};
})
->where('site', $site_code)
->Paginate(40);
} else {
$launchsitesatellite = DB::table('satellites')->where('site', $site_code)->Paginate(40);
}
return View::make('partials.launchsitedata')->with('launchsitesatellite', $launchsitesatellite)->render();
}
AJAX搜索/过滤:
$("#apply").click(function() {
$country=$('#filter-country').val();
$type=$('#filter-type').val();
$year=$('#filter-year').val();
$.ajax({
type: "GET",
url: "/data/{{$launchsitename->site_code}}",
data: {'country':$country, 'object_type':$type, 'launch':$year},
success: function(data) {
$('#data-holder').html(data);
});
});
TL; DR 例如,当我转到第2页时,您如何阻止分页重置我的AJAX搜索/过滤器?
答案 0 :(得分:0)
在客户端上,您需要在加载文档时加载查询参数过滤器值。
例如:(无错误检查)
$(document).ready(function() {
// Populate filters from query parameters
$('#filter-type').val(GetURLParameter('type'));
....
然后,在服务器上,您需要将查询过滤器附加到链接代码
例如,在渲染刀片模板之前的代码中
if(isset($typeFilter)){
$launchsitesatellite->appends(['type' => typeFilter])
}