DataTables嵌套数据的ajax

时间:2016-11-21 08:58:19

标签: json ajax datatables

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

这个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" }
        ]
    } );

正如您所见,我尝试通过将data设置为dataSrc来访问我的嵌套result.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"},
             ]
          });
     }
});

1 个答案:

答案 0 :(得分: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