数据表警告"未知参数0"

时间:2014-03-27 20:20:43

标签: javascript jquery json datatable jquery-datatables

我试图使用具有一定数量列的数据表和我从jQuery ajax获得的对象数组。

我收到错误:

datatables warning (table id = myId requested unknown parameter 0 from the data source for row 0

搜索互联网告诉我,我的message_json数组中可能有不同数量的列标题和列数据;

我在数据表初始化中设置了21列:

var construct_messages_table = function(message_json){

    var oTable = $('#tableId').dataTable( {
    "sPaginationType": "full_numbers",
    "bProcessing": true,
    "bDeferRender": true,
    "aaData": message_json,
    "aoColumns": [
        { "sTitle": "coloumn1"},
        { "sTitle": "coloumn2"},
        { "sTitle": "coloumn3"},
        { "sTitle": "coloumn4"},
        { "sTitle": "coloumn5"},
        { "sTitle": "coloumn6"},
        { "sTitle": "coloumn7"},
        { "sTitle": "coloumn8"},
        { "sTitle": "coloumn9"},
        { "sTitle": "coloumn10"},
        { "sTitle": "coloumn11"},
        { "sTitle": "coloumn12"},
        { "sTitle": "coloumn13"},
        { "sTitle": "coloumn14"},
        { "sTitle": "coloumn15"},
        { "sTitle": "coloumn16"},
        { "sTitle": "coloumn17"},
        { "sTitle": "coloumn18"},
        { "sTitle": "coloumn19"},
        { "sTitle": "coloumn20"},
        { "sTitle": "coloumn21"}

    ]
} );   

};

并且

for (var i = 1; i < message_json.length; i++){
   console.log(Object.keys(message_json[i]).length);

}

shows all objects have a length of 21. What could be wrong here?

编辑:

我删除了空值,因为这可能是问题,但仍然没有帮助。

    for (var i = 0; i < message_json.length; i++){

        for (var o in message_json[i]){

           if (message_json[i][o] == null){
               message_json[i][o] = "";
           }

        }

    }

编辑: message_json采用此格式

    [
{type: "int",
id: "111",
name: "co",
description: "",
is_bool: "0",
keyword: "<tag name=&quot;various-xml&quot;>fields</xml>",
message: "hello",
temp: "world",
settings: "",
priority: "100",
enabled: "0",
secure: "1",
var1: "post",
var1_desc: "some desc↵",
var1_query: "<DATA>blah</DATA>",
prop: "1",
prop_name: "Draft",
transaction: "1",
users: "0",
table_name: "abc"},   

{type: "int",
id: "111",
name: "co",
description: "",
is_bool: "0",
keyword: "<tag name=&quot;various-xml&quot;>fields</xml>",
message: "hello",
temp: "world",
settings: "",
priority: "100",
enabled: "0",
secure: "1",
var1: "post",
var1_desc: "some desc↵",
var1_query: "<DATA>blah</DATA>",
prop: "1",
prop_name: "Draft",
transaction: "1",
users: "0",
table_name: "abc"}];

但当然还有更多元素。而不仅仅是重复。

1 个答案:

答案 0 :(得分:1)

元素的数量必须与列相同,否则Datatables将查找数据中未包含的值。

如果您想使用类似于以下结构的结构:

    [
{type: "int",
id: "111",
name: "co",
description: "",
is_bool: "0",
keyword: "<tag name=&quot;various-xml&quot;>fields</xml>",
message: "hello",
temp: "world",
settings: "",
priority: "100",
enabled: "0",
secure: "1",
var1: "post",
var1_desc: "some desc↵",
var1_query: "<DATA>blah</DATA>",
prop: "1",
prop_name: "Draft",
transaction: "1",
users: "0",
table_name: "abc"},   

{type: "int",
id: "111",
name: "co",
description: "",
is_bool: "0",
keyword: "<tag name=&quot;various-xml&quot;>fields</xml>",
message: "hello",
temp: "world",
settings: "",
priority: "100",
enabled: "0",
secure: "1",
var1: "post",
var1_desc: "some desc↵",
var1_query: "<DATA>blah</DATA>",
prop: "1",
prop_name: "Draft",
transaction: "1",
users: "0",
table_name: "abc"}];

最好在dataTable

上使用"sAjaxSource"

当您将aaData添加到数据表时,它们通常会提供一组数组: 例如:

Fiddle

如果您想使用key:value JSON对象,则需要将mData属性添加到aoColumms配置中,如下所示:

var oTable = $('#tableId').dataTable( {
    "sPaginationType": "full_numbers",
    "bProcessing": true,
    "bDeferRender": true,
    "aaData": message_json,
    "aoColumns": [
        { "sTitle": "coloumn1","mData":"type"},
        { "sTitle": "coloumn2","mData":"id"},
        { "sTitle": "coloumn3","mData":"name"},
        { "sTitle": "coloumn4","mData":"description"},
        { "sTitle": "coloumn5","mData":"is_bool"},...

这将告诉数据表在哪里可以找到该列的值。