首页 > 解决方案 > Laravel-Infinite 滚动但在加载时随机加载数据而不会重复

问题描述

我在无限滚动加载数据时遇到问题。我想在用户加载页面或刷新页面时随机加载数据,但我的问题是当我使用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

标签: laravellaravel-bladeinfinite-scroll

解决方案


您传递给的参数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 请求上随机设置一组数据,那么只需删除 remove 参数。


推荐阅读