2

我正在尝试使用 DataTables 从内部 API 快速创建简单的结果显示。API 以以下结构返回 JSON:

obj { 
    status: 1,
    results: 100,
    offset: 25,
    limit: 25,
    data: [
        [1]: {
           title: "Blah blah one",
           description: "Doesn't really matter",
           misc: "Yadda yadda"
        },
        [2]: {
           title: "Blah blah two",
           description: "Doesn't really matter",
           misc: "Yadda yadda"
        },
    ]
}

我不能/不想仅仅因为 DataTables 使用奇怪的结构而更改 API 结构,但我想访问用于分页、动态加载等的内置功能。DataTables 似乎允许自定义数据对象,并且我已经让表格加载以下内容:

$(document).ready(function() {
    $('#example').dataTable( {
        "bProcessing": true,
        "bServerSide": true,
        "sAjaxSource": "http://api.oursite.com/api?limit=100",
        "fnServerData": function( sUrl, aoData, fnCallback, oSettings ) {
            oSettings.jqXHR = $.ajax( {
                "url": sUrl,
                "data": aoData,
                "success": fnCallback,
                "dataType": "jsonp",
                "cache": false
            } );
        },
        "sAjaxDataProp": "data",
        "aoColumns": [
            { "mData": "title" },
            { "mData": "description" },
            { "mData": "misc" },
        ]
    } );
});

但是,分页或排序功能都不起作用。我认为这是因为 DataTables 需要对象中的结果计数和分页变量——“iTotalRecords”和“iTotalDisplayRecords”。这个对吗?有什么方法可以使用 api 变量吗?提前致谢。我目前在开发控制台中没有收到任何错误,所以如果它出错,它会默默地这样做......

4

1 回答 1

2

在初始化数据表时,您可以将 aaData 设置为 javascript 函数,而不是直接将源分配给 Ajaxsource,您可以在其中操作以仅返回 obj.data。您需要手动处理一些事情。

     $('#tblExample').dataTable({
        "bJqueryUI": true,
        "bDestroy":true,
        "bSortable": false,
        "sAjaxSource": "",
        "aaData":GetData(),
        "aoColumns": [
                    {   
                      "sTitle":"Index","mDataProp": null, "sWidth": "20px", "sDefaultContent": "<span class='ui-icon ui-icon-circle-close' onclick='RemoveActiveItem(this);'></span>", "bSortable": false},
                    {   "mDataProp": "Year"},
                    {   "mDataProp": "Month"},
                    {   "mDataProp": "Savings"}         
        ]
    });        
于 2013-01-04T20:14:02.483 回答