问题描述
我在无限滚动加载数据时遇到问题。我想在用户加载页面或刷新页面时随机加载数据,但我的问题是当我使用 inRandomOrder(1234)
数据加载时没有任何顺序,但它在主页上是静态的。
例如顺序是 1,5,3,2,6,4 并且它永远不会改变
但我需要在每次加载和刷新时更改此订单,如果用户刷新页面,现在查看此订单 (5,1,4,2) 和下一次 (1,3)
控制器:
$data = Table::where('enabled',1)->inRandomOrder(2)->paginate(6);
return view('home',['data' => $data]);
刀片:
<div class="row scrolling-pagination">
@foreach ($data as $v)
@include('pages.main.card')
@endforeach
{{ $data->links() }}
</div>
JS:
$('ul.pagination').hide();
$(function() {
$('.scrolling-pagination').jscroll({
loadingHtml: 'Loading...',autoTrigger: true,padding: 0,nextSelector: '.pagination li.active + li a',contentSelector: 'div.scrolling-pagination',callback: function() {
$('ul.pagination').remove();
}
});
});
我现在正在使用 Jscroll
解决方法
您传递给 inRandomOrder()
的参数是种子,因此如果传递静态参数,您将始终获得相同集合的相同结果。您可以使用 rand()
生成种子,然后将其保存在会话数据中。虽然如果您想在用户刷新后更改顺序,您必须制定一些机制来重新生成您保存的种子,每次用户刷新网站时。
public function your_view_get_method(Request $request) {
$request->session()->forget('randSeed');
return view('home');
}
public function your_ajax_get_method(Request $request) {
$seed = $request->session()->get('randSeed',rand());
$data = Table::inRadnomOrder($seed)->paginate(6);
$request->session()->put('randSeed',$seed);
return $data;
}
这就是我要做的。
如果您想在每个 AJAX 请求中随机获取一组数据,那么只需移除该参数即可。