Laravel将搜索结果附加到分页

时间:2017-10-15 23:30:02

标签: javascript php jquery ajax pagination

我已经设法接近为我的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搜索/过滤器?

1 个答案:

答案 0 :(得分:0)

在客户端上,您需要在加载文档时加载查询参数过滤器值。

例如:(无错误检查)

$(document).ready(function() {
  // Populate filters from query parameters
  $('#filter-type').val(GetURLParameter('type'));
  ....

然后,在服务器上,您需要将查询过滤器附加到链接代码

例如,在渲染刀片模板之前的代码中

if(isset($typeFilter)){ 
  $launchsitesatellite->appends(['type' => typeFilter])
}