Javascript 我能';我无法将此JSON数据放入数据表中

Javascript 我能';我无法将此JSON数据放入数据表中,javascript,jquery,html,json,datatables,Javascript,Jquery,Html,Json,Datatables,所以,情况是这样的。有一个HTML页面,其中有一个表,这是使用插件。我必须在表中显示从jQuery POST调用接收到的数据,但我似乎总是会出错,并且不知如何去做 这就是POST呼叫的响应: [{"idoperatore":10,"nome_cognome":"Daniele Torrini","tariffa_esterno":"50.00","tariffa_interno":"0.00","tariffa_viaggio":"30.00","idtariffa_esterno":11,"i

所以,情况是这样的。有一个HTML页面,其中有一个表,这是使用插件。我必须在表中显示从jQuery POST调用接收到的数据,但我似乎总是会出错,并且不知如何去做

这就是POST呼叫的响应:

[{"idoperatore":10,"nome_cognome":"Daniele Torrini","tariffa_esterno":"50.00","tariffa_interno":"0.00","tariffa_viaggio":"30.00","idtariffa_esterno":11,"idtariffa_interno":16,"idtariffa_viaggio":13,"attivo":1,"rs":0,"iniziali":"DT"},{"idoperatore":12,"nome_cognome":"Irene Cavalletto","tariffa_esterno":"75.00","tariffa_interno":"45.00","tariffa_viaggio":"30.00","idtariffa_esterno":9,"idtariffa_interno":15,"idtariffa_viaggio":13,"attivo":1,"rs":1,"iniziali":"IC"},{"idoperatore":14,"nome_cognome":"Sandra Moschetti","tariffa_esterno":"50.00","tariffa_interno":"0.00","tariffa_viaggio":"30.00","idtariffa_esterno":11,"idtariffa_interno":16,"idtariffa_viaggio":13,"attivo":1,"rs":0,"iniziali":"SM"},{"idoperatore":15,"nome_cognome":"Federica Coucourde","tariffa_esterno":"90.00","tariffa_interno":"0.00","tariffa_viaggio":"30.00","idtariffa_esterno":8,"idtariffa_interno":16,"idtariffa_viaggio":13,"attivo":1,"rs":0,"iniziali":"FC"},{"idoperatore":16,"nome_cognome":"Matteo Belgero","tariffa_esterno":"75.00","tariffa_interno":"0.00","tariffa_viaggio":"30.00","idtariffa_esterno":9,"idtariffa_interno":16,"idtariffa_viaggio":13,"attivo":1,"rs":0,"iniziali":"MB"},{"idoperatore":17,"nome_cognome":"Luca Belgero","tariffa_esterno":"90.00","tariffa_interno":"0.00","tariffa_viaggio":"30.00","idtariffa_esterno":8,"idtariffa_interno":16,"idtariffa_viaggio":13,"attivo":1,"rs":0,"iniziali":"LB"},{"idoperatore":18,"nome_cognome":"Federico Bottoni","tariffa_esterno":"50.00","tariffa_interno":"0.00","tariffa_viaggio":"30.00","idtariffa_esterno":11,"idtariffa_interno":16,"idtariffa_viaggio":13,"attivo":1,"rs":0,"iniziali":"FB"},{"idoperatore":19,"nome_cognome":"Giuseppe Pantaleo","tariffa_esterno":"60.00","tariffa_interno":"0.00","tariffa_viaggio":"30.00","idtariffa_esterno":10,"idtariffa_interno":16,"idtariffa_viaggio":13,"attivo":1,"rs":0,"iniziali":"GP"},{"idoperatore":20,"nome_cognome":"Matteo Ferrario","tariffa_esterno":"90.00","tariffa_interno":"75.00","tariffa_viaggio":"30.00","idtariffa_esterno":8,"idtariffa_interno":9,"idtariffa_viaggio":13,"attivo":1,"rs":1,"iniziali":"MF"},{"idoperatore":21,"nome_cognome":"Alessandro Mazzeranghi","tariffa_esterno":"100.00","tariffa_interno":"0.00","tariffa_viaggio":"30.00","idtariffa_esterno":7,"idtariffa_interno":16,"idtariffa_viaggio":13,"attivo":1,"rs":0,"iniziali":"AM"}]
我没有办法修改呼叫,我必须处理这个问题。我只能访问包含回调响应的变量,但是如果需要,我可以转换或修改该数据

这是HTML表的外观:

<table class="display nowrap" id="table_operatori">
  <thead>
    <tr>
      <th>
        <span></span>
      </th>
      <th class="mdl-data-table__cell--non-numeric">Nome e Cognome</th>
      <th>Tariffa Esterno</th>
      <th>Tariffa Interno</th>
      <th>Tariffa Viaggio</th>
      <th>Attivo?</th>
      <th>RS?</th>
      <th class="mdl-data-table__cell--non-numeric">Iniziali</th>
    </tr>
  </thead>
  <tbody id="table_operatori_tbody">
  </tbody>
</table>
这将删除许多丑陋的HTML构建,但会产生错误:

DataTables警告:表id=table_operatori-为第0行第1列请求的未知参数“1”。有关此错误的详细信息,请参阅

因此,通过查看tech notes链接,它表明可能是表头中的列比表体中的列多,因此我在定义表时精确匹配了得到的字段,认为如果这样做有效,我可能最终能够隐藏不需要的列

    $("#table_offerte").DataTable({
      paging: false,
      info: false,
      columns: [
        { title: "idoperatore" },
        { title: "nome_cognome" },
        { title: "tariffa_esterno" },
        { title: "tariffa_interno" },
        { title: "tariffa_viaggio" },
        { title: "idtariffa_esterno" },
        { title: "idtariffa_interno" },
        { title: "idtariffa_viaggio" },
        { title: "attivo" },
        { title: "rs" },
        { title: "iniziali" }
      ]
    });
但它仍然给出了相同的错误。如果我将表结构与DataTable初始化匹配,它也会:

      columns: [
        { title: "idoperatore" },
        { title: "nome_cognome" },
        { title: "tariffa_esterno" },
        { title: "tariffa_interno" },
        { title: "tariffa_viaggio" },
        { title: "attivo" },
        { title: "rs" },
        { title: "iniziali" }
      ]
来自DataTables的文档还指出,在查看JSON数据时,它会查看data:property内部,您必须通过在dataSrc属性中设置空字符串来指定它是否不是对象而是数组:

DataTable({ ajax: { url: "something.json", dataSrc: "" } });
问题是它需要url:property请求数据,而我不能这样做,因为我只有包含JSON的“data”变量

我还应该提到,通过维护旧的HTML构建并将其附加到表体中,可以使表正常工作并正确显示内容,但当然,只要您尝试对任何内容进行排序或过滤,它就会消失,因为DataTable中实际上没有行,只是HTML有行。 我不知道如何在那里获取这些数据。我希望我能把一切都解释清楚,否则请随意提问,我会尽力澄清。

提前感谢您的帮助。

文档有点混乱,因为有太多不同的方法来设置表格,而且几乎只有一个人(Allan Jardine)编写插件并记录它

首先,您不需要任何表头。将您的HTML更改为:

 <table class="display nowrap" id="table_operatori"></table>
综上所述:

$("#table_offerte").DataTable({
  paging: false,
  info: false,
  data: myPOSTResponse,
  columns: [
    { visible: false },  //this is the ID you don't want to see, no need to give it a title
    { title: "Nome e Cognome", className: "mdl-data-table__cell--non-numeric" },
    { title: "Tariffa Esterno" },
    { title: "Tariffa Interno" },
    { title: "Tariffa Viaggio" },
    { visible: false },  
    { visible: false },  
    { visible: false },  
    { title: "Attivo?" },
    { title: "RS?" },
    { title: "Iniziali", className: "mdl-data-table__cell--non-numeric" }
  ]
});
如果你没有做过其他有趣的事情,这应该会让你跑起来


编辑:正如DocCobra在注释中提到的,您还必须在这里的字段级别指定
数据:
选项,因为数组元素是对象。如果它们本身就是数组,那么您就没有。

这是一个非常非常有用的答案!清楚,解释得很好,很好:-)谢谢!你的评论肯定给了我正确的方向,我终于成功了!但是我要指出一些事情:你的代码中有{visible,false},应该是{visible:false},而且在尝试你的代码并查找它给出的错误以及你链接的示例之后,我发现你还必须指定{data:“parameter_name”}每个列需要从中拾取数据的选项。像这样:{title:“Tariffa Esterno”,data:“Tariffa_Esterno”},{title:“Tariffa Interno”,data:“Tariffa_Interno”}我还想指出(如果有人偶然发现这个问题),通过像BobRodes所说的那样设置表并在我上面的评论中进行调整,它就可以与.clear()完美地工作和.rows.add(数据),使用与上面相同的json对象。这意味着您可以对其进行初始化,然后在以后对其进行操作,就像我在本例中所需要的那样。@DocCobra-Oops。我把逗号改成了冒号。对不起。当然,我也复制了几次错误。接下来,我回到过去,对一些旧代码进行了更深入的研究,你完全正确。如果像这里一样有一个对象文本数组,那么还必须指定data选项。如果你有一个数组,你没有。因此,如果您的JSON中有all[而不是{,您就不必指定数据了。很抱歉,我也错过了这一点(看起来我可能需要新的眼镜),但看起来我给了您足够的解决方案。
 <table class="display nowrap" id="table_operatori"></table>
data: myPOSTResponse,
$("#table_offerte").DataTable({
  paging: false,
  info: false,
  data: myPOSTResponse,
  columns: [
    { visible: false },  //this is the ID you don't want to see, no need to give it a title
    { title: "Nome e Cognome", className: "mdl-data-table__cell--non-numeric" },
    { title: "Tariffa Esterno" },
    { title: "Tariffa Interno" },
    { title: "Tariffa Viaggio" },
    { visible: false },  
    { visible: false },  
    { visible: false },  
    { title: "Attivo?" },
    { title: "RS?" },
    { title: "Iniziali", className: "mdl-data-table__cell--non-numeric" }
  ]
});