Datatable 1.10设置displayStart不生效,服务端请求start参数恒为0如何解决?
问题原因
这是DataTables 1.10.3版本的已知bug:使用大写D开头的DataTable()构造函数(返回新版API实例)时,displayStart配置项在服务端模式(serverSide: true)下不会被正确读取,导致每次请求的start参数强制为0;而小写d开头的dataTable()返回的是旧版jQuery实例,没有这个bug,但不支持新版的search()、row()等API调用,就会出现你遇到的方法调用报错问题。
修复方案
你可以根据项目的实际情况选择以下任意一种方案:
- 方案1:升级DataTables版本(最推荐)
该bug在1.10.4及以上版本已经被官方修复,升级后原有displayStart配置无需修改,新版API也可以正常使用,没有兼容问题。 - 方案2:不升级版本,手动覆盖请求参数
不需要修改初始化写法,在ajax.data回调中手动给首次请求的start赋值即可,修改对应代码:
该方案完全兼容现有新版API调用,无需修改其他业务代码。data: function (d) { // 仅首次请求覆盖start,后续分页操作不受影响 if (d.draw === 1) { d.start = 100; // 和你要设置的displayStart值保持一致即可 } // 保留你原有的其他请求参数设置逻辑 } - 方案3:兼容旧版初始化写法的API调用
如果你坚持使用小写d的dataTable()初始化,只需要在调用API前加一层.api()转换,就不会出现方法报错:// 初始化用小写d写法 this.table = $('#table').dataTable({ // 你的原有配置 }); // 调用方法前先转为新版API实例 this.table.api().search('关键词').draw(); this.table.api().row(0).data();
内容的提问来源于stack exchange,提问作者Shadow_Sphynx
相关产品推荐
相关产品推荐

