微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Laravel-Infinite 滚动但在加载时随机加载数据而不重复

如何解决Laravel-Infinite 滚动但在加载时随机加载数据而不重复

我在无限滚动加载数据时遇到问题。我想在用户加载页面或刷新页面随机加载数据,但我的问题是当我使用 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 请求中随机获取一组数据,那么只需移除该参数即可。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。