Laravel无限滚动,但在加载时随机加载数据,没有重复



我在用无限滚动加载数据时遇到问题。我想在用户加载页面或刷新页面时随机加载数据,但我的问题是当我使用inRandomOrder(1234)数据加载时没有任何顺序,但它在主页上是静态的。

例如,顺序类似于1,5,3,2,6,4,并且其从未改变

但我需要在每次加载和刷新时更改此顺序,如果用户刷新了页面,现在查看此顺序(5,6,1,3,4,2(和下一次(1,5,2,4,6,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请求上随机设置一组数据,那么只需移除参数即可。

最新更新