You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Laravel 8 Yajra DataTable 刷新时保持当前页码不返回首页的实现方法

解决Yajra DataTable刷新时保持当前页码的问题

我来帮你搞定这个问题!你遇到的情况是DataTable默认刷新时会重置分页到第一页,只需要调整ajax.reload()的调用方式,同时修正控制器的ServerSide逻辑就能解决。

一、前端修改:刷新时保持当前页码

你已经在初始化时把DataTable实例存在了dataTable变量里,刷新的时候直接用这个变量调用带参数的ajax.reload()方法即可:

// 替换原来的刷新代码
dataTable.ajax.reload(null, false);

参数说明:

  • 第一个参数null:表示不需要自定义回调函数(如果需要刷新后做其他操作可以传自定义函数)
  • 第二个参数false:这个是关键!它告诉DataTable不要重置分页状态,这样刷新后就会停留在当前页码。

比如你可以把刷新逻辑绑定到按钮上:

$('#btn-refresh-users').click(function() {
    dataTable.ajax.reload(null, false);
});

二、控制器代码修正(适配ServerSide模式)

注意到你当前的控制器用了get()直接获取所有用户数据,这和你开启的serverSide: true模式冲突!ServerSide模式下,Yajra DataTables需要自己处理分页、排序、搜索等请求参数,所以应该传递查询构造器实例而不是直接获取集合:

// 去掉get(),传递查询构造器给DataTables
$userQuery = User::select('id', 'name', 'email', 'sex', 'bday', 'contact', 'scope', 'scope_id');
return \DataTables::of($userQuery)->make();

这样Yajra才能根据前端传来的分页参数(比如当前页码、每页条数)正确返回对应的数据,保证ServerSide模式正常工作。

为什么之前会回到第一页?

默认情况下,ajax.reload()的第二个参数resetPaging是true,这会强制把分页重置到第一页。设置为false后,DataTable会保留当前的分页状态,刷新后加载当前页的最新数据。

内容的提问来源于stack exchange,提问作者beginner

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.30 17:52:29