2017-01-02 96 views
2

有没有一种方法可以动态设置数据表列的数据源?为jQuery数据表列动态设置数据源

$.ajax({ 
    data: JSON.stringify(data), 
    url: urlGetProviderQualificationTimeData, 
    type: 'POST', 
    contentType: "application/json; charset=utf-8", 
    success: function (obj) { 
     if (obj.success) { 
      $('#tblProds').dataTable({ 
      data: obj.data.ProdsDetails, 
      columns: [ 
       { "data": "PName" }, 
       { "data": "PTime" } //hardcoded mapping of properties  
      ] 
      }); 
     } 
    }, 
}); 

​​样品阵列:

Array[2] 
0:Object 
    PName:"ATT", 
    PTime:"6.48" 
1:Object 
    PName:"CENTURYLINK", 
    PTime:"3.67" 

有没有我们可以摆脱性能和列的这个硬编码映射的方式就像我通过硬编码每个属性名这样设置columns.data

+0

你想设置你从'ajax'调用收到的属性吗? –

+0

@ Alexandru-IonutMihai完全没有指定属性名称 –

+0

你想从哪里获得属性?从'obj.data'?请告诉我们阵列。 – Andy

回答

4

这里是你的数组:

var array=[ 
      {PName:"ATT",PTime:"6.48" }, 
      {PName:"CENTURYLINK",PTime:"3.67"} 
      ]; 

现在,你应该得到的所有keys和建立最终的数组:现在

var obj=array[0]; 
var keys=[]; 
for(var k in obj) 
    keys.push({"data":k}); 

keys阵列看起来是这样的:

[ 
    {"data":"PName"}, 
    {"data":"PTime"} 
] 

最后一步是将数组分配给columns道具的DataTable erty:

columns:keys 

现在,这应该是这样的:

columns:[ 
      { "data": "PName" }, 
      { "data": "PTime" }  
] 

希望这有助于!

+0

是的,现在你明白了。谢谢:) –

+0

不客气。 –

0

我有同样的问题,并通过为columns.data属性创建额外的json数组来解决此问题。使用php函数来遍历标题并将其放入json数组中。

+0

有这个事情。但这是一个解决方法。我在想,如果我们有什么可以解决问题的话 –

+0

没错,我认为目前这是不可能的。我刚刚查看了网站,找不到任何关于此的信息。 – dexter