2016-11-21 48 views
2

我正在使用DataTables ajax来填充表格。我正在关注this example,它的工作原理是如果我的json看起来像他们的例子,但是我的'data'是我的json中的嵌套对象,然后无法填充表,因为无法从json获取值。关于嵌套数据的DataTables ajax

此JSON的工作原理:

{ 
    "data": [ 
     {"id": "myid1", "name": "name1"}, 
     {"id": "myid2", "name": "name2"} 
     ] 
} 

但我的JSON看起来像这一点,这是行不通的

{ 
"result": { 
    "data": [ 
     {"id": "myid1", "name": "name1"}, 
     {"id": "myid2", "name": "name2"} 
     ] 
    } 
} 

这是我的HTML(与第一JSON作品):

<table id="myTable" class="tabletable-bordered dataTable"> 
    <thead> 
     <tr>     
      <th>name</th> 
      <th>id</th> 
     </tr> 
    </thead> 
    <tbody> 
     <td></td> 
     <td></td> 
    </tbody> 
</table> 

这就是我的js:

$('#myTable').DataTable({ 
     "ajax": "/names", 
     "processing": true, 
     "dataSrc" : "result.data", 
     "columns": [ 
      { "data": "name" }, 
      { "data": "id" } 
     ] 
    }); 

正如您所看到的,我尝试通过将dataSrc设置为result.data来访问我的嵌套data,但表中未显示任何内容。

我不能改变json响应的格式,你知道如果不能用这个json使用DataTables ajax吗?谢谢!


我的解决方案

最后,我用以下解决方案去(得到一个答案,我的职务之前),我首先做一个Ajax调用,然后在成功创建我的DataTable。

所以我只能改变我的js这一个:

$.ajax({ 
    type: "GET", 
    url: '/names', 
    dataType: "json", 
    contentType: "application/json; charset=utf-8", 
    success: function (data) { 
     var myData = data.result.data; 
     $('#myTable').DataTable({ 
      "data": myData, 
      "columns": [ 
        { "data": "id" }, 
        { "data": "name"}, 
      ] 
      }); 
    } 
}); 

回答

4

我有更复杂的处理要求,让我实现我自己的AJAX功能,但我认为你可以不用它:

$('#myTable').DataTable({ 
    "processing": true, 
    "ajax": { 
    "url": "/names", 
    "dataSrc" : function(jsonObj) { 
     // Just being safe here 
     if(!jsonObj.results || !json.results.data) { 
      return []; 
     } 

     return jsonObj.results.data;  
    } 
    }, 
    "columns": [ 
    { "data": "name" }, 
    { "data": "id" } 
    ] 
}); 

以下是对此的参考:https://datatables.net/reference/option/ajax