javascript - 使用 Datatables 从 JSON 数据构建 HTML 动态表

标签 javascript php jquery html json

我需要使用数据表插件基于 php 脚本返回的 json 构建一个表。我的代码如下:

HTML:

<table id="doentes" class="table table-striped table-hover">
  <thead>
    <tr>
      <th>Id</th>
      <th>Pedidos (Canal 1)</th>
      <th>Pedidos (Canal 2)</th>
      <th>Pedidos (Canal 3)</th>
      <th>Preço</th>
      <th>Frete</th>
      <th>Prazo</th>
      <th>Pageviews</th>
      <th>Abandonos</th>
    </tr>
  </thead>
  <tbody>
     <tr>
      <td>Id</td>
      <td>Pedidos (Canal 1)</td>
      <td>Pedidos (Canal 2)</td>
      <td>Pedidos (Canal 3)</td>
      <td>Preço</td>
      <td>Frete</td>
      <td>Prazo</td>
      <td>Pageviews</td>
      <td>Abandonos</td> 
     </tr>
  </tbody>
</table>

Javascript:

<link rel="stylesheet" type="text/css" href="https://cdn.datatables.net/1.10.16/css/dataTables.bootstrap4.min.css">  
<script type="text/javascript" charset="utf8" src="https://cdn.datatables.net/1.10.16/js/jquery.dataTables.min.js"></script>
<script type="text/javascript" charset="utf8" src="https://cdn.datatables.net/1.10.16/js/dataTables.bootstrap4.min.js"></script>     
<script>
  $(document).ready(function() {
      $('#doentes').DataTable({
        "ajax" :  "functions/diagnosticoGeral.php",
        "columns" : [ 
          { 
              "data" : "id"
          }, {
            "data" : "pedidos0"
          }, {
            "data" : "pedidos1"
          }, {
            "data" : "pedidos2"
          }, {
            "data" : "preco"
          }, {
            "data" : "frete"
          }, {
            "data" : "prazo"
          }, {
            "data" : "pageviews"
          }, {
            "data" : "abandonos"
          }]
      });
  });

  </script>

php json 输出示例:

[
{ 
"id": "159830",
"pedidos0": "Outros Canais: 0% da queda, com variação de 100% em relação aos  
últimos ciclos",
"pedidos1": "CNova: 0% da queda, com variação de -20% em relação aos últimos 
ciclos",
"pedidos2": "MadeiraMadeira: 0% da queda, com variação de -23% em relação 
aos últimos ciclos",
"preco": "Sem variação significativa",
"pageviews": "-9 % em relação aos últimos ciclos",
"frete": [
"-8 % em relação aos últimos ciclos",
"SP: 9% em relação aos últimos ciclos"
],
"prazo": [
"14% em relação aos últimos ciclos",
"SP: 10% em relação aos últimos ciclos"
],
"abandonos": "-4 % em relação aos últimos ciclos"
},
{
"id": "159831",
"pedidos0": "Outros Canais: 0% da queda, com variação de 0% em relação aos 
últimos ciclos",
"pedidos1": "CNova: 0% da queda, com variação de 0% em relação aos últimos 
ciclos",
"pedidos2": "Walmart: 0% da queda, com variação de -25% em relação aos 
últimos ciclos",
"preco": "Sem variação significativa",
"pageviews": "-31 % em relação aos últimos ciclos",
"frete": [
"-100 % em relação aos últimos ciclos",
"SP: -100 % em relação aos últimos ciclos"
],
"prazo": [
"-100 % em relação aos últimos ciclos",
"SP: -100 % em relação aos últimos ciclos"
],
"abandonos": "-21 % em relação aos últimos ciclos"
},
{
"id": "161138",
"pedidos0": "Outros Canais: 0% da queda, com variação de 0% em relação aos 
últimos ciclos",
"pedidos1": "CNova: 0% da queda, com variação de 0% em relação aos últimos 
ciclos",
"pedidos2": "B2W: 0% da queda, com variação de -57% em relação aos últimos 
ciclos",
"preco": "12% em relação aos últimos ciclos",
"pageviews": "-55 % em relação aos últimos ciclos",
"frete": [
"23% em relação aos últimos ciclos",
"SP: 19% em relação aos últimos ciclos"
],
"prazo": [
"-3 % em relação aos últimos ciclos",
"SP: -14 % em relação aos últimos ciclos"
],
"abandonos": "-68 % em relação aos últimos ciclos"
}
]

它只返回空表,浏览器报错:

jquery.dataTables.min.js:48 Uncaught TypeError: Cannot read property 'length' of undefined
    at jquery.dataTables.min.js:48
    at i (jquery.dataTables.min.js:35)
    at Object.success (jquery.dataTables.min.js:35)
    at i (jquery.min.js:2)
    at Object.fireWith [as resolveWith] (jquery.min.js:2)
    at A (jquery.min.js:4)
    at XMLHttpRequest.<anonymous> (jquery.min.js:4)

我尝试了一些示例,但我对 javascript 的了解有限。我也没有在这里找到适合我的问题的任何问题。任何指导将不胜感激。

最佳答案

您没有在 JSON 响应中定义“数据”。你应该有...

{
  "data": [
    { 
        "id": "159830"
        "pedidos0": "...",
        "pedidos1": "...",
        "pedidos2": "...",
        "preco": "Sem variação significativa",
        "pageviews": "-9 % em relação aos últimos ciclos",
        "frete": [
            "-8 % em relação aos últimos ciclos",
            "SP: 9% em relação aos últimos ciclos"
        ],
        "prazo": [
            "14% em relação aos últimos ciclos",
            "SP: 10% em relação aos últimos ciclos"
        ],
        "abandonos": "-4 % em relação aos últimos ciclos"
    },
    {
        "id": "159831",
        "pedidos0": "...",
        "pedidos1": "...",
        "pedidos2": "...",
        "preco": "Sem variação significativa",
        "pageviews": "-31 % em relação aos últimos ciclos",
        "frete": [
            "-100 % em relação aos últimos ciclos",
            "SP: -100 % em relação aos últimos ciclos"
        ],
        "prazo": [
            "-100 % em relação aos últimos ciclos",
            "SP: -100 % em relação aos últimos ciclos"
        ],
        "abandonos": "-21 % em relação aos últimos ciclos"
    },
    {...},
    {...},
  ]
}

希望对你有帮助

关于javascript - 使用 Datatables 从 JSON 数据构建 HTML 动态表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46329852/

相关文章:

javascript - 在 ChartJS 中获取 X、Y onClick 图表坐标

javascript - 为什么这个 gulp 任务没有连续运行?

php - 从 zip 内的目录中删除文件

javascript - 如何在 javaScript 中获取动态 div 宽度

javascript - 识别句子中的回文

javascript - Ember 使用 this.render 将数据传递到模板时出现问题

javascript - 如何访问用户的 Chrome 应用

php - 在PHP中,如果没有错误发生,抑制函数的错误输出(通过@)是否会影响性能?

php - 如何将临时文件与 Rails 中的用户 session 链接起来?

Javascript:在通过其他属性选择的 DOM 对象上运行对象方法