2016-11-21 82 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