【问题标题】:DataTables warning: Requested unknown parameter '0' from the data source for row '0'DataTables 警告:从数据源请求未知参数 '0' 用于行 '0'
【发布时间】:2013-05-08 12:30:56
【问题描述】:

有人知道,下面这个非常简单的 HTML 文件有什么问题吗?

我只是想使用an array of objects 作为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>

更新:好的,我得到了作者to use a newer version of DataTables or rename mData to mDataProp的答案

【问题讨论】:

  • 我也用错了版本。谢谢。
  • 在初始化数据表时尝试指定columns参数。参考:datatables.net/reference/option/columns.data#Examples
  • 在我的情况下,ajax 没问题,但我已经从服务器发送了一个数组。必须在数组中发送数组。 IE。数组中的行!!!

标签: jquery-datatables


【解决方案1】:

对于 nullundefined value 错误,只需将这一行添加到属性中:,columnDefs: [ { "defaultContent": "-", "targets": "_all" } ] p>

例子:

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

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

【讨论】:

  • 我使用了这个解决方案,但“columnDefs”周围没有引号。效果很好,谢谢!!
  • 这里是我!!最新版本不需要在属性名称周围加上引号,以防万一有人遇到同样的问题。希望我早点看到这个,非常感谢!
  • 这是我要找的。非常感谢!
  • 这可行,但这也隐藏了实际问题。更好地查找、格式化或修复空源
【解决方案2】:

您正在使用一个对象数组。你能用二维数组代替吗?

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,但我想使用对象数组,因为我计划稍后添加一些功能...
  • 感谢您的投票。我已经修改了答案以包含对象数组。不幸的是,必须用三个空格填充,否则 DataTables 仍然会抱怨。
【解决方案3】:

这困扰了我一个多小时。

如果您使用 dataSrc 选项和列 defs 选项,请确保它们位于正确的位置。我在 ajax 设置中嵌套了列定义,并且浪费了太多时间来弄清楚这一点。

这很好:

这不好:

细微的差别,但真实到足以导致脱发。

【讨论】:

  • @qwertzman 抱歉!!我的工作落后了一个小时,我想尽快回去工作,但也想留下我的发现来节省别人的时间。我采取了简单的方法。
【解决方案4】:

我遇到了同样的问题。就我而言,我在最后一列之后缺少逗号。 30分钟的生命浪费了,我再也回不来了!

【讨论】:

  • 但是什么是解决方案?
  • @ImBS - 我没有逗号;我需要在最后一个大括号的末尾添加逗号。
  • 添加这些专栏开发者解决了我的问题!
  • columnDefs 为我解决了这个问题。弄清楚为什么 DataTables.net 上的示例不需要那个。
【解决方案5】:

确保列名相同。它们区分大小写。在这里,就我而言,当我的模型的列名大写并且我在 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; }
    }

所以在我的例子中,我正在使用列(名称,名称,Id)填充数据表。我正在复制第二个列名称进行测试。

【讨论】:

  • 另外,请务必记住,您可能已经为您的 Web api 激活了驼峰式案例。
  • 宾果游戏,就我而言,这是驼峰问题。谢谢@JeanJimenez
【解决方案6】:

当无法找到在 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 将取消警告。
注意:此属性可以根据您使用的数据表版本进行更改。

【讨论】:

    【解决方案7】:

    来自 DataTables 网站:

    DataTables 中的每个单元格都请求数据,当 DataTables 尝试 获取单元格的数据并且无法这样做,它将触发 警告,告诉您数据在预期的地方不可用 成为。警告信息是:

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

    地点:

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

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

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

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

    有关详细信息,请参阅 DataTables 网站上的 tech note

    【讨论】:

      【解决方案8】:

      我遇到这个问题是因为我在custom renderingColumns section 中搞砸了return keyword

      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,我也遇到了同样的问题,这对我有帮助,谢谢!
      【解决方案9】:

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

      【讨论】:

        【解决方案10】:

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

        DataTables with Array of Objects

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

        【讨论】:

        • 你说 DataTables 很棒(我同意),添加了一个官方示例的链接,并告诉我们你挣扎了多少天。但这如何回答我的问题?
        • 好吧,如果您访问该链接,您会确切地知道如何正确使用新数据表的对象数组。链接上的示例显示了如何使用列和数据属性准确地做到这一点。抱歉,这个网站是为了帮忙,而不是为某人编写确切的代码!
        • 其实你需要在这里写下你的解决方案。如果一段时间后链接丢失,则不建议仅链接答案,然后您的答案将被标记为删除6th para in 1st answer
        【解决方案11】:

        如果您使用的是knockout.bindings.dataTables.js,那么您可以编辑文件并替换此行

        dataTable.fnAddData(unwrappedItems);
        

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

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

        【讨论】:

          猜你喜欢
          • 2016-09-02
          • 2016-09-24
          • 1970-01-01
          • 2014-04-15
          • 1970-01-01
          • 2013-11-15
          • 2014-01-16
          • 2021-06-08
          相关资源
          最近更新 更多