【问题标题】:Cannot read property length of undefined in Datatables无法读取数据表中未定义的属性长度
【发布时间】:2020-03-17 23:26:27
【问题描述】:

我正在尝试在数据表上显示一些数据。从 Ajax 请求中调用数据,响应为 Json 数组,如下所示:

[{"item": "one", "price": 22, "status": "free"}, {"item": "two", "price": 15, "status": "taken"}]

这是我的要求:

<script>
$(document).ready(function() {

  $('mytable').DataTable( {
      "ajax": "myurl",
      "dataType": 'json',
      "dataSrc": '',

      "columns": [
        {"data": "item" },
        {"data": "price" },
        {"data": "status"},  
    ]

  } );
} );
</script> 

这是我的 HTML:

<table id="mytable" class="display" style="width:100%">
    <thead>
        <tr>
            <th>ITEM</th>
            <th>PRICE</th>
            <th>STATUS</th>
        </tr>
    </thead>
</table>

问题是数据没有显示在表格上。 我认为当 Datatables 尝试处理我的 JSON 数据时会出现问题,因为我在控制台上收到此错误:

Uncaught TypeError: Cannot read property 'length' of undefined

【问题讨论】:

  • 是不是你的table不显示数据的问题?
  • 是的,很抱歉,我现在编辑了我的帖子
  • 您的表格 id 是“开放的”,您的 JS 正在尝试查找 $('mytable')
  • 刚刚创建问题时出错,已更正

标签: javascript jquery ajax datatables


【解决方案1】:

首先,您不需要在 HTML 中制作表格。数据表创建表。

第二件事是你没有正确地调用你的桌子$('#mytable')

第三,您似乎没有将任何数据传递给表:

使用您的数据创建一个变量: var data = [{"item": "one", "price": 22, "status": "free"}, {"item": "two", "price": 15, "status": "taken"}]

将其添加到表格中:

$('#mytable').DataTable( {
      "data": data,
      "columns": [
        {"data": "item" },
        {"data": "price" },
        {"data": "status"},  
    ]

  } );
} );

链接到小提琴https://jsfiddle.net/edpbk0gc/3/

编辑

由于您正在进行ajax 调用,您需要指定"ajax" 而不是"data"

$('#mytable').DataTable( {
    ajax: {
        url: "/fetch_data",
        type: "GET",
        data: {
            id: id
        },
    },
    "columns": [
        {"data": "item" },
        {"data": "price" },
        {"data": "status"},  
    ]

  } );
} );

你基本上只是在那里做你喜欢的 ajax 调用。

参考这个doc

【讨论】:

  • 如果你的数据源是JS,可以参考这个例子:datatables.net/examples/data_sources/js_array.html
  • @Dementic 固定链接,也没有注意到你可以像这样在小提琴上添加资源,谢谢提醒。
  • 等等,我的数据源不是变量。我正在从 URL 中检索要在表上使用的数据,那么如何在变量中使用它?
  • 您是通过 ajax 调用获取它吗?您可以从任何地方传递数据并将其分配给变量并将其传递给创建表的方法。如果你使用的是 AJAX,那就有点不同了
  • 是的,我通过 ajax 调用获取它
【解决方案2】:

用@ricks 提到的$('#mytable') 替换您的表选择器,您需要将ajax 中的json 与数据表预期的格式相匹配,如下所示:

{ 
    data: [{"item": "one", "price": 22, "status": "free"}, {"item": "two", "price": 15, "status": "taken"}] 
}

【讨论】:

  • you need to match your json from the ajax to the format expected by datatables不正确,可以自定义datatables.net/forums/discussion/41385/custom-json-format
  • 我知道,但我认为修复格式很简单,而不是使用 ajax.dataSrc 选项,否则在实现它时没有人需要寻求帮助。
猜你喜欢
  • 2014-04-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-11-01
  • 1970-01-01
  • 1970-01-01
  • 2015-08-22
  • 2015-08-10
相关资源
最近更新 更多