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
相关产品推荐
相关产品推荐

