【问题标题】:How to create nested datatable from JSON array object response如何从 JSON 数组对象响应创建嵌套数据表
【发布时间】:2019-06-22 06:31:55
【问题描述】:

我得到 JSON 格式的 API 响应,其中包含嵌套数组。我想在嵌套数据表中解析它。我已经为此尝试过,但它不起作用。谁能让我知道我在哪里犯了错误。在 JSON 中,我有乘客数据并且每个乘客都有多个司机,我想以嵌套格式在数据表中显示它,比如乘客是父级,并且作为子级的各自司机。
Expected Result

这是我的 JSON 响应:

/* Formatting function for row details - modify as you need */
function format(driver_data) {
    // `d` is the original data object for the row
    return '<table cellpadding="5" cellspacing="0" border="0" style="padding-left:50px;">' +
        '<tr>' +
        '<td>Full name:</td>' +
        '<td>' + driver_data.employeename + '</td>' +
        '</tr>' +
        '<tr>' +
        '<td>Extension number:</td>' +
        '<td>' + driver_data.email + '</td>' +
        '</tr>' +

        '</table>';
}

$(document).ready(function () {
    var table = $('.trip_unmacthed').DataTable({
        type: "GET",
        url: "https://api.myjson.com/bins/13woes",
        dataType: "json",
        "columns": [
            {
                "className": 'details-control',
                "orderable": false,
                "data": null,
                "defaultContent": ''
            },
            {
                "data": "employeename"
                },
            {
                "data": "email"
                }
        ],
        "order": [[1, 'asc']]
    });

    // Add event listener for opening and closing details
    $('.trip_unmacthed tbody').on('click', 'td.details-control', function () {
        var tr = $(this).closest('tr');
        var row = table.row(tr);

        if (row.child.isShown()) {
            // This row is already open - close it
            row.child.hide();
            tr.removeClass('shown');
        } else {
            // Open this row
            row.child(format(row.data())).show();
            tr.addClass('shown');
        }
    });
});
<script src="https://code.jquery.com/jquery-3.3.1.min.js"></script>
<script src="https://cdn.datatables.net/1.10.19/js/jquery.dataTables.min.js"></script>


<table class="table table-striped table-bordered table-hover trip_unmacthed">
                                                    <thead>
                                                        <tr>
                                                            <th>User Type</th>
                                                            <th> Name</th>
                                                            <th>Start Location</th>
                                                            <th>Drop Location</th>
                                                            <th> Date </th>
                                                            <th>Actions</th>
                                                        </tr>
                                                    </thead>
                                                    <tbody id="myData">


                                                    </tbody>
                                                </table>

【问题讨论】:

    标签: javascript jquery json ajax datatable


    【解决方案1】:

    根据 API Docs 和您的格式函数将passenger_data 更改为数据。

    $(document).ready(function () {
            function format(driver_data) {
                console.log(driver_data); var b = ''; var i;
                for (i = 0; i < driver_data.length; i++) {
    
                    b = b + '<tr>' +
                        '<td></td>' +
                        '<td>' + driver_data[i].employeename + '</td>' + 
                        '<td>' + driver_data[i].email + '</td>' +
                        '<td>' + driver_data[i].distance + '</td>' +
    
                        '</tr>';
                }
                return b;
            }
    
                var table = $('#example').DataTable({
                    "ajax": "https://api.myjson.com/bins/y53hs",
                    "columns": [
                        {
                            "className": 'details-control',
                            "orderable": false,
                            "data": null,
                            "defaultContent": ''
                        },
                        {
                            "data": "employeename"
                        },
                        {
                            "data": "email"
                        },
                        {
                            "data": "mobilenumber"
    
                        }
    
                    ],
                    "order": [[1, 'asc']]
                });
    
                // Add event listener for opening and closing details
                $('#example tbody').on('click', 'td.details-control', function () {
                    var tr = $(this).closest('tr');
                    var row = table.row(tr);
    
                    if (row.child.isShown()) {
                        // This row is already open - close it
                        row.child.hide();
                        tr.removeClass('shown');
                    } else {
                        // Open this row
                        console.log(row.data());
                        row.child(format(row.data().driver_data)).show();
                        tr.addClass('shown');
                    }
                });
            });
    

    【讨论】:

    【解决方案2】:

    不确定您的 JSON 是什么。如果您的 JSON 中有乘客,例如

        {
      "passenger_data": [
        {
          "employeename": "Passenger A",
          "email": null,
          "driver_data": [
            {
              "employeename": "Driver A1",
              "email": null,
              "distance": 0,
    
            },
            {
              "employeename": "Driver A2",
              "email": null,
              "distance": 0,
    
            },
    
          ],
          "mobilenumber": "+12344576",
    
        },
    
      ]
    }
    


    那么你应该这样做

     "columns": [
            {"passenger_data": "employeename"},
            {"passenger_data": "driver_data.employeename"},
            {"passenger_data": "driver_data.email"}
        ],
    

    可能是您没有使用. 运算符

    【讨论】:

    • 请检查我已经更新了我的 json 格式,我试过了,但它不会工作
    • @Tamara 不知道您要达到什么目的,但其中有很多语法错误。这是你想要什么的粗略想法。它也有 API 响应 jsfiddle.net/Lyo0wcpa/4
    • 为了更清楚地说明您是否要在表格中创建子行,这也可以帮助您.. datatables.net/examples/api/row_details.html
    • 这就是我想要做的,但不幸的是无法做到
    • 是的,但这不是我想要实现的目标,但是是的,我从中得到了一些想法。但我仍然在努力做到这一点
    猜你喜欢
    • 1970-01-01
    • 2020-12-01
    • 1970-01-01
    • 2019-04-23
    • 1970-01-01
    • 2016-09-04
    • 2021-01-31
    • 2021-08-02
    • 1970-01-01
    相关资源
    最近更新 更多