You need to enable JavaScript to run this app. 如何将Axios调用多API经Promise.all返回的数据填充到对应标签页的DataTable中
优惠活动
大模型
产品
解决方案
定价
更多

如何将Axios调用多API经Promise.all返回的数据填充到对应标签页的DataTable中

实现方案

你需要先建立标签页ID和对应DataTable的映射关系,同时为每个不同表头的DataTable预定义列配置,再根据表是否已经初始化走对应的更新/初始化逻辑即可,具体改造步骤如下:

1. 预定义配置规则

因为每个DataTable的表头、ID均不相同,需要提前为每个标签页对应绑定table ID和列配置,列配置中的字段要和接口返回的业务字段一一对应。

2. 调整请求后的数据处理逻辑

拿到接口返回数据后,先判断目标DataTable是否已经初始化:

  • 已初始化:清空原有数据,插入新数据后重绘
  • 未初始化:传入数据和列配置完成首次初始化

3. 完整改造后代码示例

// 预定义各表的列配置,根据你实际表头修改,这里仅做示例
const tableColumns = {
  'second-tab': [
    {data: 'field1', title: '表头1'},
    {data: 'field2', title: '表头2'},
    // 补充second-tab下table的所有列配置
  ],
  'third-tab': [
    {data: 'fieldA', title: '列A'},
    {data: 'fieldB', title: '列B'},
    // 补充third-tab下table的所有列配置
  ],
  'fourth-tab': [
    // 补充fourth-tab下table的所有列配置
  ],
  'default': [
    // 补充默认标签页table的所有列配置
  ]
}

$('#myTab button').on('shown.bs.tab', function (e) {
  var tab = $(this).attr("id");
  // 补充你原有代码漏写的域名判断条件即可
  if (/* 域名已选择的判断逻辑 */) {
    switchtabs(tab);
    return true;
  } else {
    alert("Please select Domain Name");
    return false
  }
});

function switchtabs(tab){
  var url = '';
  let prm;
  let tableId; // 对应tab下dataTable的ID
  let columns;
  switch (tab) {
    case 'second-tab':
      url = link1;
      prm = {type:'sample1', fromdate:fromdate, todate:todate, descn:info}
      tableId = '#second-table' // 替换为second-tab下实际的table ID
      columns = tableColumns['second-tab']
      break;
    case 'third-tab':
      url = link2;
      prm = {type:'sample1', fromdate:fromdate, todate:todate, descn:info}
      tableId = '#third-table' // 替换为third-tab下实际的table ID
      columns = tableColumns['third-tab']
      break;
    case 'fourth-tab':
      url = link3;
      prm = {type:'sample1', fromdate:fromdate, todate:todate, descn:info}
      tableId = '#fourth-table' // 替换为fourth-tab下实际的table ID
      columns = tableColumns['fourth-tab']
      break;
    default: 
      url = link;
      prm = {type:'domainwise', fromdate:fromdate, todate:todate, descn:shop}
      tableId = '#default-table' // 替换为默认标签页下实际的table ID
      columns = tableColumns['default']
  }
  if(typeof url !== "undefined" && tableId){
    axios.post(url, prm).then(function(response){
      const table = $(tableId)
      // 假设接口返回的数据集放在response.data.list,可根据你实际返回结构调整
      const tableData = response.data.list || response.data
      // 判断table是否已经初始化DataTable
      if ($.fn.DataTable.isDataTable(tableId)) {
        // 已初始化,直接更新数据
        table.DataTable().clear().rows.add(tableData).draw()
      } else {
        // 未初始化,执行首次渲染
        table.DataTable({
          data: tableData,
          columns: columns,
          // 其他你需要的DataTable配置,比如分页、搜索开关等
          paging: true,
          searching: true
        })
      }
    }).catch(function(err){
      console.log(err);
    })
  }
}

注意事项

  • 列配置中的data属性值要和接口返回的每条数据的字段名完全对应,title就是表头显示的文字
  • 如果接口返回数据格式不符合DataTable要求,可以在拿到数据后先做一层格式转换再传入
  • 确保每个tab下的table标签ID和你在switch中定义的tableId完全一致

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.16 13:36:04