DataTables警告:从数据源请求行“ 0”的未知参数“ 0”


68

有人知道吗,下面的非常简单的HTML文件怎么了?

在此处输入图片说明

我只是想使用对象数组作为DataTables的数据源:

tests.html:

<html>
<head>
<link type="text/css" rel="stylesheet" href="https://ajax.googleapis.com/ajax/libs/jqueryui/1/themes/redmond/jquery-ui.css">
<link type="text/css" rel="stylesheet" href="https://ajax.aspnetcdn.com/ajax/jquery.dataTables/1.9.2/css/jquery.dataTables_themeroller.css">
<script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jquery/1/jquery.min.js"></script>
<script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jqueryui/1/jquery-ui.min.js"></script>
<script type="text/javascript" src="https://ajax.aspnetcdn.com/ajax/jquery.dataTables/1.9.2/jquery.dataTables.min.js"></script>
<script type="text/javascript">

var data = [
    {"Name":"UpdateBootProfile","Result":"PASS","ExecutionTime":"00:00:00","Measurement":[]},
    {"Name":"NRB Boot","Result":"PASS","ExecutionTime":"00:00:50.5000000","Measurement":[{"TestName":"TOTAL_TURN_ON_TIME","Result":"PASS","Value":"50.5","LowerLimit":"NaN","UpperLimit":"NaN","ComparisonType":"nctLOG","Units":"SECONDS"}]},
    {"Name":"NvMgrCommit","Result":"PASS","ExecutionTime":"00:00:00","Measurement":[]},
    {"Name":"SyncNvToEFS","Result":"PASS","ExecutionTime":"00:00:01.2500000","Measurement":[]}
];

$(function() {
        var testsTable = $('#tests').dataTable({
                bJQueryUI: true,
                aaData: data,
                aoColumns: [
                        { mData: 'Name' },
                        { mData: 'Result' },
                        { mData: 'ExecutionTime' }
                ]
        });
});

</script>
</head>
<body>

<table id="tests">
<thead>
<tr>
<th>Name</th>
<th>Result</th>
<th>ExecutionTime</th>
</tr>
</thead>
<tbody>
</tbody>
</table>

</body>
</html>

更新:好的,我得到了作者的答案,可以使用较新版本的DataTables或将mData重命名为mDataProp


2
我也使用了错误的版本。谢谢。
Sridhar Sarnobat

初始化数据表时,尝试指定columns参数。参考:datatables.net/reference/option/columns.data#Examples
shasi kanth

Answers:


27

您正在使用对象数组。您可以改用二维数组吗?

http://www.datatables.net/examples/data_sources/js_array.html

看到这个jsfiddle:http : //jsfiddle.net/QhYse/

我使用了这样的数组,并且工作正常:

var data = [
    ["UpdateBootProfile","PASS","00:00:00",[]] ,
    ["NRB Boot","PASS","00:00:50.5000000",[{"TestName":"TOTAL_TURN_ON_TIME","Result":"PASS","Value":"50.5","LowerLimit":"NaN","UpperLimit":"NaN","ComparisonType":"nctLOG","Units":"SECONDS"}]] ,
    ["NvMgrCommit","PASS","00:00:00",[]] ,
    ["SyncNvToEFS","PASS","00:00:01.2500000",[]]
];

编辑以包含对象数组

这个问题有可能的解决方案: jQuery DataTables fnrender with objects

此jsfiddle http://jsfiddle.net/j2C7j/使用对象数组。为了不出错,我不得不用3个空白值填充-我知道这不是最佳值。您可能会发现使用fnRender更好的方法,如果这样做,请发表。

var data = [
   ["","","", {"Name":"UpdateBootProfile","Result":"PASS","ExecutionTime":"00:00:00","Measurement":[]} ]

];

$(function() {
        var testsTable = $('#tests').dataTable({
                bJQueryUI: true,
                aaData: data,
                aoColumns: [
                        { mData: 'Name', "fnRender": function( oObj ) { return oObj.aData[3].Name}},
                        { mData: 'Result' ,"fnRender": function( oObj ) { return oObj.aData[3].Result }},
                        { mData: 'ExecutionTime',"fnRender": function( oObj ) { return oObj.aData[3].ExecutionTime } }
                ]
        });
});

1
谢谢+1,但我想使用对象数组,因为我打算稍后添加一些功能...
Alexander Farber

2
感谢您的投票。我修改了答案以包含对象数组。不幸的是,必须填充三个空格,否则DataTables仍然会抱怨。
高耸的Q Bangwhistle,

92

对于null未定义的值错误,只需将以下行添加到attribute:,"columnDefs": [ { "defaultContent": "-", "targets": "_all" } ]

范例:

oTable = $("#bigtable").dataTable({
  "columnDefs": [{
    "defaultContent": "-",
    "targets": "_all"
  }]
});

警报框将不再显示,任何空值都将替换为您指定的值。


1
我使用了此解决方案,但没有在“ columnDefs”周围加上引号。很好,谢谢!
卡洛斯·佩雷斯·查韦斯

Sme在这里!如果有人遇到同样的问题,最新版本不需要在属性名称周围加上引号。希望我能早点看到这个,非常感谢!
Quintessa Anderson

11

这困扰了我一个多小时。

如果您使用的是dataSrc选项和column defs选项,请确保它们位于正确的位置。我在Ajax设置中嵌套了列defs,却花了太多时间弄清楚了这一点。

这很好:

好

不是很好:

在此处输入图片说明

细微的差别,但足以引起脱发。


1
@qwertzman抱歉!我的工作落后了一个小时,想尽快恢复工作,但也想离开我的调查结果以节省其他人的时间。我走了简单的路。
1998年

10

我遇到了同样的问题。事实证明,上一栏后我缺少逗号。我一生都浪费了30分钟,我再也回不来了!

在此处输入图片说明


3
但是什么是解决方案?
ImBhavin95年

1
@ImBS-我没有逗号;我需要在最后一个花括号的末尾添加逗号。
跳蚤

2
添加那些专栏文章是解决我的问题的原因!
WtFudgE

columnDefs为我解决了这个问题。弄清楚为什么DataTables.net上的样本不需要它。
MetalMikester '20

4

确保列名称相同。它们区分大小写。在这里,就我而言,当我的模型的列名大写且我在ajax请求的数据中使用了所有小写字母时,出现此错误。

因此,我通过匹配列名称与现有模型名称完全相同的方式来解决。

数据表绑定

$("#Customers").DataTable({
            ajax: {
                url: "/api/customers/",
                dataSrc: ""
            },
            columns: [
                {
                    data: "Name",
                    render: function (data, type, customer) {
                        return "<a href='/customers/edit/" + customer.Id + "'>" + customer.Name + "</a>";


                    }

                },
                {
                    data: "Name"
                },
                {
                    data: "Id",
                    render: function (data) {
                        return "<button class='btn-link js-delete' data-customer-id=" + data + ">Delete</button>";
                    }
                }
            ]
        });

Web API方法:

  public IEnumerable<Customer> GetCustomers()
        {
            return _context.Customers.ToList();

        }

我的模特:-

 public class Customer
    {
        public int Id { get; set; }

        [Required]
        [StringLength(255)]
        public string Name { get; set; }        

        [Display(Name="Date Of Birth")]        
        public DateTime? BirthDate { get; set; }


        public bool isSubscribedToNewsLetter { get; set; }

        public MembershipType MembershipType { get; set; }

        [Display(Name="Membership Type")]
        [Required]
        public byte MembershipTypeId { get; set; }
    }

所以在我的情况下,iam用column(Name,Name,Id)填充数据表。iam复制第二个要测试的列名。


1
另外,请务必记住,您可能已将骆驼保护套激活到Web api。
Jean Jimenez

在我的情况下,宾果游戏是骆驼问题。谢谢@JeanJimenez
邦邦

2

从DataTables网站:

DataTables中的每个单元格都请求数据,并且当DataTables尝试获取某个单元格的数据而无法执行此操作时,它将触发警告,告知您数据在预期的位置不可用。警告消息是:

DataTables警告:表ID = {id}-请求的未知参数' {parameter}'{row-index}

哪里:

{id} 替换为已触发错误的表的DOM ID

{parameter} 是DataTables正在请求的数据参数的名称

{row-index} 是触发错误的rwo的DataTables内部行索引。

因此,要分解它,DataTables已请求提供的给定行中的{parameter}数据,那里没有数据,或者是nullundefined

有关更多信息,请参见DataTables网站上的此技术说明


2

我遇到这个问题是因为我return keyword陷入custom rendering了困境Columns section

columns: [
    {....
        'data': function(row, type, val, meta) {
            if (row.LetterStatus)
                 return '@CultureHelper.GetCurrentCulture()' == 'ar'? row.LetterStatus.NameInArabic: row.LetterStatus.NameInEnglish;
            else row.LetterStatusID.toString();// here is the problem because I messed the Return key keyword
          },
     ......
    }

在我的代码的问题是,因为我messedReturn keywordelse clause

所以我改成

....
else return row.LetterStatusID.toString();// messed return keyword added
.....

不知道为什么你们给-1,我有同样的问题,这帮助了我谢谢!
弗拉基米尔·博齐奇(Fladimir Bozic)

2

当无法在DataTable配置中找到请求字段定义时,这在DataTables中是非常常见的情况。
例如:

                "aoColumns": [{
                    mData: 'mobile', sWidth: "149px;"
               }, {
                    mData: 'name', sWidth: "121px;"
               }, {
                    mData: 'productName', sWidth: "116px;"
                            }
            }];

在这里,如果DataTable没有收到上述属性。它将生成以下警告:

DataTables警告:从数据源请求的行“ 0”的未知参数“ 0”

为了解决这个问题,您只需要在“ aoColumns”中设置一个默认值

例如:

  "aoColumns": [{
                mData: 'mobile',sDefaultContent :  '',sWidth: "149px;"
           }, {
                mData: 'name',sDefaultContent :  '', sWidth: "121px;"
           }, {
                mData: 'productName',sDefaultContent :  '', sWidth: "116px;"
              }
        }];

sDefaultContent禁止该警告。
注意:可以根据您使用的dataTables的版本来更改此属性。


1

在我的怪异场景中,我有一个不同的列,该列并不总是在“ render”函数中返回值。return null解决了我的问题。


1

如果有人正在使用新的DataTables(很棒的顺便说一句)并且想要使用对象数组,那么可以使用columns选项轻松地做到这一点。有关此方面的出色示例,请参考以下链接。

具有对象数组的数据表

在过去的两天里,我一直在努力解决这个问题。由于其他代码原因,我不想切换到多维数组,因此正在寻找这样的解决方案。


您已经说过DataTables很棒(我同意),在一个官方示例中添加了一个链接,并告知我们您辛苦了几天。但这如何回答我的问题?
亚历山大·法伯

好吧,如果您访问链接,您将找到如何在新的DataTable中正确使用对象数组的确切方法。链接上的示例显示了如何使用列和数据属性精确地执行此操作。对不起,这个网站是为了帮助您,而不是为某人编写确切的代码!
impiyush

1

如果您正在使用,knockout.bindings.dataTables.js则可以编辑文件并替换此行

dataTable.fnAddData(unwrappedItems);

if (unwrappedItems.length > 0) {
    dataTable.fnAddData(unwrappedItems);
}

这对我有帮助,希望对您有所帮助。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.