DataTables

时间:2017-05-03 21:22:27

标签: jquery ajax datatables http-status-codes

我正在使用带有Grails应用程序的DataTables 1.10.10。该表通过ajax调用填充到REST端点。

当一切正常时,请求返回200级状态代码,一切都很好。我们试图优雅地处理另一端系统出现问题的时候,在这种情况下它会向我们发送一个400的代码和一个空体。

我在datatables文档中找不到任何关于如何陷阱状态代码的结论。我发现的是一个开箱即用的DT不能处理非200码的页面,并会显示错误。

https://datatables.net/manual/tech-notes/7

但是,我似乎无法做到这一点。当我的模拟抛出400级错误并传递一个空的json数组时,该表会重新绘制一条永不消失的“处理”消息。

喜欢是一种捕获400级错误的方法,允许表显示“表中没有数据”,而且在回调函数中能够解释为什么没有数据,通过向页面写入引导通知或其他内容。

有关如何使用DataTables捕获非200级状态代码的任何建议吗?

 function redrawResults(){
    resultsTable.destroy();
    resultsTable = $('#displayTable').DataTable({
        "dom": '<"toolbar">Bfrtip',
        "buttons": [
            {
                extend: 'pdf',
                text: 'Save Table as PDF',
                filename: "Redacted " + $('#search_text').val(),
                className: 'btn btn-primary',
                orientation: 'landscape',
                exportOptions: {
                    columns: [':visible',9,10 ]
                }
            },
            {
                extend: 'csv',
                text: 'Export to CSV',
                filename: "Redacted " + $('#search_text').val(),
                className: 'btn btn-primary',
                exportOptions: {
                    columns: [':visible',9,10 ]
                }
            }],
        order: [[2, "asc"], [0, "asc"]],
        drawCallback: function (settings) {
            var api = this.api();
            var rows = api.rows({page: 'current'}).nodes();
            var last = null;

            api.column(2, {page: 'current'}).data().each(function (group, i) {
                var groupInfo = group.split("~");
                var checkRedacted;
                var deleteControls;
                checkRedacted = (groupInfo[2] == "true") ? "groupRedacted" : "group";
                deleteControls = (groupInfo[2] == "true") ? "<B>REDACTED</B>" : buildButtonGroup('Delete package from collection', 'Redact',groupInfo[0],groupInfo[3]);
                if (last !== group) {
                    $(rows).eq(i).before(
                            //Note - the extra, empty TD is to force the responsive child row control to be invisible for group rows
                            '<tr class="' + checkRedacted + '"><td class="hidden"></td><td colspan="9">' + "<B>Package ID: </B>" + groupInfo[0] + ', <B>Hash: </B>' + groupInfo[1] + '<div class="pull-right">' + deleteControls + '</div></td></tr>'
                    );

                    last = group;
                }
            });
        },
        ajax: {
            url: ajaxSource,
            data: {
                searchText: $('#search_text').val()
            },
            dataSrc: function (json) {
                var return_data = new Array();
                for (var i = 0; i < json.data.length; i++) {
                    for (var x = 0; x < json.data[i].events.length; x++) {
                        Object.keys(json.data[i].events[x]).forEach(function (keyValue) {
                            if (keyValue != "collections") {
                                var statusMsg = "n/a";
                                var statusText = "n/a";
                                if ("status" in json.data[i].events[x][keyValue] &&
                                    json.data[i].events[x][keyValue]["status"] != null) {
                                    statusText = json.data[i].events[x][keyValue]["status"];

                                    //if there's also a status message, include it, n/a as a default
                                    if (json.data[i].events[x][keyValue].status_message != null){
                                        statusMsg = json.data[i].events[x][keyValue].status_message
                                    }

                                }

                                return_data.push({
                                    "package_id": json.data[i].package_id + "~" + json.data[i].hash + "~" + json.data[i].redacted + "~" + json.data[i].collections,
                                    "collections": json.data[i].collections,
                                    "event_type": keyValue,
                                    "message_type": json.data[i].events[x][keyValue].message_type,
                                    "occurred": json.data[i].events[x][keyValue].occurred,
                                    "from": json.data[i].events[x][keyValue].sent_from,
                                    "to": json.data[i].events[x][keyValue].sent_to,
                                    "event_collections": json.data[i].events[x].collections,
                                    "status": statusText,
                                    "statusMsg": statusMsg,
                                    "package_id_export":json.data[i].flare_package_id,
                                    "hash":buildSpaceDelimitedHash(json.data[i].stix_hash)

                                })
                            }
                        })


                    }
                }
                return return_data;
            }
        }
        ,
        responsive: true,
        columnDefs: [
            {
                data: "occurred",
                targets: 0,
                orderData: [2, 0]
            },
            {
                data: "event_collections",
                targets: 1,
                orderData: [2, 1]
            },

            {
                data: "package_id",
                "visible": false,
                targets: 2
            },
            {
                data: "event_type",
                targets: 3,
                orderData: [2, 3]
            },
            {
                data: "message_type",
                targets: 4,
                orderData: [2, 4]
            },
            {
                data: "from",
                targets: 5,
                orderData: [2, 5]
            },
            {
                data: "to",
                targets: 6,
                orderData: [2, 6]
            },
            {
                data: "status",
                targets: 7,
                orderData: [2, 7]
            },
            {
                data: "statusMsg",
                targets: 8,
                orderData: [2, 8]
            },
            {
                data: "package_id_export",
                "visible": false,
                targets: 9
            },
            {
                data: "hash",
                "visible": false,
                targets: 10
            }
        ]
    });
}

0 个答案:

没有答案
相关问题