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

如何使用jQuery和DataTable动态获取表名传递AJAX请求参数

问题根因
  • ajax.data回调函数内的this默认指向ajax配置对象,而非当前正在初始化的表格DOM,所以直接写$(this).attr("data-table")无法获取目标属性
  • 直接调用$('table.table').attr("data-table")时,jQuery匹配到多个符合选择器的元素时,默认只会返回第一个匹配元素的属性值,因此两个表格的请求都会拿到第一个表格的tableOne标识,出现参数串值
可行解决方案

方案1:遍历单个表格初始化(推荐)

遍历所有目标表格,逐个初始化DataTable实例,通过闭包提前缓存每个表格对应的自定义属性值,回调中直接读取缓存值即可,不存在上下文问题:

$('table.table').each(function () {
  // 缓存当前表格DOM和对应的标识
  const $table = $(this);
  const tableIdentify = $table.data('table'); // 等价于$table.attr('data-table')

  $table.DataTable({
    autoWidth: false,
    paging: true,
    info: true,
    responsive: true,
    filter: true,
    ajax: {
      url: base_url + "controller/action",
      type: "POST",
      data: function (d) {
        d.tableIdentify = tableIdentify;
      }
    },
    stateSave: true,
    processing: true,
    serverSide: true
  });
});

方案2:通过DataTable实例上下文获取当前表格DOM

如果不想改批量初始化的结构,可以在ajax.data回调中,通过当前上下文获取DataTable实例,再定位到对应的表格DOM读取属性:

$('table.table').DataTable({
  autoWidth: false,
  paging: true,
  info: true,
  responsive: true,
  filter: true,
  ajax: {
    url: base_url + "controller/action",
    type: "POST",
    data: function (d) {
      // 从当前上下文获取DataTable实例,再拿到对应的原生表格节点
      const currentTable = new $.fn.dataTable.Api(this).table().node();
      d.tableIdentify = $(currentTable).data('table');
    }
  },
  stateSave: true,
  processing: true,
  serverSide: true
});

优先选择方案1,闭包缓存的写法逻辑更直观,不依赖DataTable内部上下文规则,不会因为插件版本迭代出现兼容性问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 01:30:35