jQuery数据表添加动态列 要求:绘制一个带有JSON对象的datatable,JSON对象由 网络服务。 约束:列数未知。

jQuery数据表添加动态列 要求:绘制一个带有JSON对象的datatable,JSON对象由 网络服务。 约束:列数未知。,jquery,ajax,datatables,datatables-1.10,Jquery,Ajax,Datatables,Datatables 1.10,我的实现如下所示,但我不确定从ajax请求接收JSON后在何处/如何定义列 $("#reportTable").DataTable({ "ajax": { "url": "/path/that/returns/json", "type": "POST", "data": { "formatType": "json", "dispatchType": "api" , "csrfmiddlewaretoken" : "{{ csrf_token

我的实现如下所示,但我不确定从ajax请求接收JSON后在何处/如何定义列

$("#reportTable").DataTable({
    "ajax": {
        "url": "/path/that/returns/json",
        "type": "POST",
        "data": { "formatType": "json", "dispatchType": "api" , "csrfmiddlewaretoken" : "{{ csrf_token }}"},
        "dataSrc": function ( json ) {
            console.log(json); //can i set my column definition here?
        },
    },
    "columns":["Do i need to even add this?"],
    "autoWidth": false,
    "pageLength": 50
});
这是返回的JSON格式,请注意,属性可能会有所不同:

结果1:

    [
       {
          "fname":"Bruce",
          "lname":"Wayne",
          "id":"BatMan"
       },
       {
          "fname":"Steve",
          "lname":"Rogers",
          "id":"CptAmerica"
       },
       {
          "fname":"Tony",
          "lname":"Stark",
          "id":"IronMan"
       }
    ]
结果2:

    [
       {
          "company":"Wayne Enterprices",
          "owner":"Bruce Wayne"
       },
       {
          "company":"Stark Industries",
          "owner":"Tony Stark"
       },
       {
          "company":"SpaceX",
          "owner":"Elon Musk"
       }
    ]

谢谢

以下是如何实现这一目标的完整示例:

This is a quick post about how to modify your JSON returned objects before sending them to the tables using DataTables.js. 
In this example I am using a flat array for my JSON objects. For more uses for data sources in AJAX visit http://www.datatables.net/examples/ajax/

The Code

$('#example_table').DataTable({
  //'deferRender': false,
  'ajax'       : {
    "type"   : "POST",
    "url"    : http://yourURLhere.com/path/to/your/script,
    "dataSrc": function (json) {
      var return_data = new Array();
      for(var i=0;i< json.length; i++){
        return_data.push({
          'title': json[i].title,
          'url'  : '<img src="' + json[i].url + '">',
          'date' : json[i].date
        })
      }
      return return_data;
    }
  },
  "columns"    : [
    {'data': 'url'},
    {'data': 'title'},
    {'data': 'date'}
  ]
});


So the dataSrc property can have a function passed to it. The dataSrc property contains the returned information given from your post request. Now, since we are using a flat array like this:

[
  {
   title : 'example_title',
   url   : 'example_url',
   date  : 'example_date'
  },
  {
   title : 'example_title2',
   url   : 'example_url2',
   date  : 'example_date2'
  },... and so on...
]
/** *获取随机数据集 * */ 常量getData==>{ 让数据=[ [ { 名字:布鲁斯, 名字:韦恩, id:蝙蝠侠 }, { fname:Steve, 名字:罗杰斯, id:CptAmerica }, { 姓名:托尼, 名字:斯塔克, 铁人 } ],[ { 公司名称:韦恩·恩特普莱斯, 所有者:布鲁斯·韦恩 }, { 公司:斯塔克工业公司, 所有者:托尼·斯塔克 }, { 公司名称:SpaceX, 所有者:伊隆·马斯克 } ] ]; 让index=Math.roundMath.random;//1或0 返回数据[索引]; } /** *此函数用作ajax调用 */ 常量getAjaxData==>{ 返回新的PromiseSolve,拒绝=>{ 让data=getData; 返回数据; } } const buildHeader=数据=>{ 设firstRow=data[0]| |[], keys=Object.keysfirstRow; return keys.mapkey=>{ 数据:关键, 姓名:key } } /** *使用数据初始化datatable **/ const buildDataTable=列,data=>{ console.log{columns,data}; $sample-table.DataTable{ 数据:数据, 列:列, 页长:100, 处理:对, }; } //主要 $window.ready=>{ //模拟ajax调用 getAjaxData.thendata=>{ 让columns=buildHeaderdata; buildDataTablecolumns、data; }.catcherr=>{ console.Log无法获取数据,错误; } } 文件
谢谢,但正如我所说,在ajax响应到来之前,我不会知道JSON属性。因此,我无法定义与您的答案类似的列。我已修改了答案。请看一看谢谢,Brajesh,但我不知道响应中发送的每个JSON的长度。我更新了这个问题,以强调每次发出ajax请求时,响应都会改变。如果需要进一步说明,请告诉我。嘿@vignz.pie,你解决了这个问题吗?我面临着同样的问题,并试图在几个小时内找到解决方案。。。
$.ajax({
    url: 'userController?action=list',
    success : function(data, textStatus, jqXHR) {
        var table_data = JSON.parse(data);
        var table = $('#usermaintenancetable').DataTable( {
            data: table_data
     });
  } 
});


    So here the response is in String format and I have change it to JSON using JSON.parse() then passed this as data to data table.