如何通过外部AJAX调用获取Datatables的筛选、排序等查询参数
你可以通过DataTables提供的原生API直接获取所需的所有请求参数,以下是具体实现方式:
方案1:直接调用内置方法获取完整参数(推荐)
DataTables内置的table.ajax.params()方法可以直接返回和内置ajax请求完全一致的所有参数,包含order、search、start、length、列筛选值等所有你需要的字段,直接把返回的对象放到你自定义AJAX的data参数中即可。
修改后的getDT函数代码如下:
function getDT() { // 直接获取DataTables自动生成的所有请求参数 const dtRequestParams = table.ajax.params(); $.ajax({ type: 'GET', url: '/ajax/objects.txt', data: dtRequestParams, // 携带参数发送 }).done(function (result) { result = JSON.parse(result); table.clear(); table.rows.add(result.data).draw(); }); }
方案2:手动拼接参数
如果你初始化DataTables时没有配置ajax属性导致ajax.params()无法返回有效参数,可以通过各独立API分别获取对应参数自行拼接:
function getDT() { // 获取分页参数 const pageInfo = table.page.info(); // 获取排序参数 const orderConfig = table.order(); // 获取全局搜索参数 const globalSearch = table.search(); // 拼接为和内置请求结构一致的参数对象 const dtRequestParams = { draw: pageInfo.page + 1, start: pageInfo.start, length: pageInfo.length, 'search[value]': globalSearch, 'order[0][column]': orderConfig[0][0], 'order[0][dir]': orderConfig[0][1], // 如需多列排序/单列筛选,可遍历order数组/列对象拼接对应参数即可 }; $.ajax({ type: 'GET', url: '/ajax/objects.txt', data: dtRequestParams, }).done(function (result) { result = JSON.parse(result); table.clear(); table.rows.add(result.data).draw(); }); }
更简便的优化方案
如果你的需求只是点击按钮触发AJAX刷新,不需要额外自定义AJAX逻辑,完全可以直接使用DataTables的内置ajax能力,不用自己写完整AJAX请求:
- 初始化时配置ajax参数:
table = $('#example').DataTable({ ajax: { url: '/ajax/objects.txt', method: 'GET', dataSrc: 'data' // 直接指定返回结果中数据数组的字段名,无需手动解析 }, "columns": [ { "data": "name" }, { "data": "position" }, { "data": "office" }, { "data": "extn" }, { "data": "start_date" }, { "data": "salary" } ] });
- 按钮点击事件直接调用刷新方法,所有参数会自动携带:
$('button').on('click', function () { table.ajax.reload(); });
内容的提问来源于stack exchange,提问作者sfarzoso
相关产品推荐
相关产品推荐

