- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
所以,情况是这样的。有一个带有表格的 HTML 页面,它使用 DataTables插入。我必须在表中显示我从 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>
表中的列数与 JSON 中的字段数不同,因为 JSON 中以“id”开头的字段必须是隐藏值,并且之前用作 HTML 元素的属性,以便在中使用它们后来的时刻。这也是空表头的原因:表格之前其实是用纯HTML填充的,前面有一个checkbox来选择行,像这样:
data.forEach(function (element) {
element["attivo"] == "1" ? element["attivo"] = "Si" : element["attivo"] = "No";
element["rs"] == "1" ? element["rs"] = "Si" : element["rs"] = "No";
var i = element['idoperatore'];
var tableRow = '<tr><td><label class="mdl-checkbox mdl-js-checkbox mdl-js-ripple-effect mdl-data-table__select" for="table_operatori_checkbox_row[' + i + ']"><input type="checkbox" id="table_operatori_checkbox_row[' + i + ']" class="mdl-checkbox__input" onClick="fOperatore_Checkbox_SelectUnique(' + i + ')" /></label></td>'
tableRow += '<td class="mdl-data-table__cell--non-numeric" id="table_operatori_nomecognome_row[' + i + ']">' + element['nome_cognome'] + '</td>';
tableRow += '<td id="table_operatori_tariffaesterno_row[' + i + ']" idtariffa="' + element["idtariffa_esterno"] + '">' + element['tariffa_esterno'] + '</td>';
tableRow += '<td id="table_operatori_tariffainterno_row[' + i + ']" idtariffa="' + element["idtariffa_interno"] + '">' + element['tariffa_interno'] + '</td>';
tableRow += '<td id="table_operatori_tariffaviaggio_row[' + i + ']" idtariffa="' + element["idtariffa_viaggio"] + '">' + element['tariffa_viaggio'] + '</td>';
tableRow += '<td id="table_operatori_attivo_row[' + i + ']">' + element['attivo'] + '</td>';
tableRow += '<td id="table_operatori_rs_row[' + i + ']">' + element['rs'] + '</td>';
tableRow += '<td class="mdl-data-table__cell--non-numeric" id="table_operatori_iniziali_row[' + i + ']">' + element['iniziali'] + '</td></tr>';
$("#table_operatori_tbody").append(tableRow);
这有效,在某种意义上,(除了非常丑陋之外)意味着表格已经形成,您可以像我们想要的那样选择行,然后再对这些行进行操作。但是您无法对表中的任何行进行排序或搜索过滤。
尽管如此,如果这意味着让 DataTable 工作,我还是愿意维护丑陋的 HTML 构建,因为使用 .row.add() 你可以添加一个元素,我也尝试过,将 .append(tableRow) 更改为:< br/> .DataTable().row.add($.parseHTML(tableRow));这也不起作用,并给出了同样的错误。虽然还在 table 上显示了这个:Displays object picture
在初始化的时候,我没有数据可以放入表中。该表必须初始化为空,并在稍后添加响应中的行。我试过了(“数据”是包含服务器响应的变量):
$("#table_operatori").DataTable().rows.add(data);
这会删除很多丑陋的 HTML 构建,但它会给出错误:
DataTables warning: table id=table_operatori - Requested unknown parameter '1' for row 0, column 1. For more information about this error, please see http://datatables.net/tn/4
所以,通过查看那个技术说明链接,它说可能是表头中的列比表体中的列多,所以我在定义表时完全匹配了我得到的字段,认为如果可行的话,我最终可以隐藏不需要的列。
$("#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 的文档还说它在 data: 属性中查看 JSON 数据,您必须通过在 dataSrc 属性中设置一个空字符串来指定它是否不是对象而是数组:
DataTable({ ajax: { url: "something.json", dataSrc: "" } });
问题是它需要 url: 属性请求的数据,而我不能那样做,因为我只有包含 JSON 的“数据”变量。
我还应该提到,通过维护旧的 HTML 构建并将其附加到表体中,可以使表工作并正确显示内容,like this ,但是当然,一旦您尝试对任何内容进行排序或过滤,它就会全部消失,因为 DataTable 实际上并没有其中的行,只有 HTML 有。我不知道如何在其中获取这些数据。我希望我解释清楚了所有内容,否则请随意提问,我会尽力澄清。
在此先感谢您的帮助。
最佳答案
该文档有点令人困惑,因为设置表格的方法有很多种,而且几乎都是一个人 (Allan Jardine) 编写插件和记录插件。
首先,您不需要任何表格标题。将您的 HTML 更改为:
<table class="display nowrap" id="table_operatori"></table>
如果你想给 tbody
标签添加 ids 或 classes,那么你也需要添加它们。但首先,这就是您需要的全部 HTML。
这里令人困惑的是,Allan 的许多示例都包含硬编码到 HTML 中的数据,没有 JSON 或 AJAX 或任何涉及的内容。当您这样做时,您确实需要设置 HTML header 、所有单元格以及其他所有内容。看看他的其中一个示例(例如 this one)中的 HTML 并亲眼看看。然后,当他转向 JSON 示例时,他提取数据但保留 header 。同样,您可以将它们放入,但不要到。
相反,如果您从 JSON 中提取数据,则可以使用 HTML th
标记指定 header ,也可以使用 columns
(或 colDefs
) 选项。你不需要两者都做。这在文档中并不像它可能的那样清楚,因为在大多数示例中,Allan 都做了。
无论您以何种方式指定 header ,它们都必须与 JSON 提要的列数相匹配。如果他们不这样做,您将得到某种形式的错误。此外,如果您同时使用 column
和 th
,它们两者 必须匹配您的 JSON 字段计数,否则您将收到该错误。这就是为什么你得到你的错误。您正确匹配了 columns
定义,但在表定义中遗漏了一些 th
标记。解决方案是完全删除 th
标记。
我假设您遗漏某些 th
标记的原因是您认为这是使列不可见的方法。事实并非如此,原因我在上面已经描述过了。定义列是否可见(以及定义许多其他可能的属性,列出 here )的最简单方法是在 columns
数组中:只需设置列的 visible
选项为 false
。 (您也可以将 th
标签与类一起使用,并在 CSS 中设置 visibility:none
,但这更简单。跟踪更少。)
此外,列上的标题值是该列的 columns
数组中 title
的值。所以,你需要让它看起来像你想要的那样,而不是把你的 JSON 字段的名称放在那里。
最后,使用 data
选项,您正在阅读文档的错误部分,它是关于如何在运行 dataTable( )
。您的 POST 数据中已有数据,因此您不需要这样做。所以,阅读 this反而。看一下第二个示例,它显示了一个对象数组作为数据源。从我看到的你的 JSON 字符串来看,你应该只需要添加一个这样的选项:
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" }
]
});
如果您还没有做其他有趣的事情,那应该会让您运行。 :)
编辑:正如 DocCobra 在评论中提到的,您还必须在此处的字段级别指定 data:
选项,因为数组元素是对象。如果它们本身就是数组,那么您就不是。
关于javascript - 我无法将此 JSON 数据放入 DataTables,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49943490/
我通过 spring ioc 编写了一些 Rest 应用程序。但我无法解决这个问题。这是我的异常(exception): org.springframework.beans.factory.BeanC
我对 TestNG、Spring 框架等完全陌生,我正在尝试使用注释 @Value通过 @Configuration 访问配置文件注释。 我在这里想要实现的目标是让控制台从配置文件中写出“hi”,通过
为此工作了几个小时。我完全被难住了。 这是 CS113 的实验室。 如果用户在程序(二进制计算器)结束时选择继续,我们需要使用 goto 语句来到达程序的顶部。 但是,我们还需要释放所有分配的内存。
我正在尝试使用 ffmpeg 库构建一个小的 C 程序。但是我什至无法使用 avformat_open_input() 打开音频文件设置检查错误代码的函数后,我得到以下输出: Error code:
使用 Spring Initializer 创建一个简单的 Spring boot。我只在可用选项下选择 DevTools。 创建项目后,无需对其进行任何更改,即可正常运行程序。 现在,当我尝试在项目
所以我只是在 Mac OS X 中通过 brew 安装了 qt。但是它无法链接它。当我尝试运行 brew link qt 或 brew link --overwrite qt 我得到以下信息: ton
我在提交和 pull 时遇到了问题:在提交的 IDE 中,我看到: warning not all local changes may be shown due to an error: unable
我跑 man gcc | grep "-L" 我明白了 Usage: grep [OPTION]... PATTERN [FILE]... Try `grep --help' for more inf
我有一段代码,旨在接收任何 URL 并将其从网络上撕下来。到目前为止,它运行良好,直到有人给了它这个 URL: http://www.aspensurgical.com/static/images/a
在过去的 5 个小时里,我一直在尝试在我的服务器上设置 WireGuard,但在完成所有设置后,我无法 ping IP 或解析域。 下面是服务器配置 [Interface] Address = 10.
我正在尝试在 GitLab 中 fork 我的一个私有(private)项目,但是当我按下 fork 按钮时,我会收到以下信息: No available namespaces to fork the
我这里遇到了一些问题。我是 node.js 和 Rest API 的新手,但我正在尝试自学。我制作了 REST API,使用 MongoDB 与我的数据库进行通信,我使用 Postman 来测试我的路
下面的代码在控制台中给出以下消息: Uncaught DOMException: Failed to execute 'appendChild' on 'Node': The new child el
我正在尝试调用一个新端点来显示数据,我意识到在上一组有效的数据中,它在数据周围用一对额外的“[]”括号进行控制台,我认为这就是问题是,而新端点不会以我使用数据的方式产生它! 这是 NgFor 失败的原
我正在尝试将我的 Symfony2 应用程序部署到我的 Azure Web 应用程序,但遇到了一些麻烦。 推送到远程时,我在终端中收到以下消息 remote: Updating branch 'mas
Minikube已启动并正在运行,没有任何错误,但是我无法 curl IP。我在这里遵循:https://docs.traefik.io/user-guide/kubernetes/,似乎没有提到关闭
每当我尝试docker组成任何项目时,都会出现以下错误。 我尝试过有和没有sudo 我在这台机器上只有这个问题。我可以在Mac和Amazon WorkSpace上运行相同的容器。 (myslabs)
我正在尝试 pip install stanza 并收到此消息: ERROR: No matching distribution found for torch>=1.3.0 (from stanza
DNS 解析看起来不错,但我无法 ping 我的服务。可能是什么原因? 来自集群中的另一个 Pod: $ ping backend PING backend.default.svc.cluster.l
我正在使用Hibernate 4 + Spring MVC 4当我开始 Apache Tomcat Server 8我收到此错误: Error creating bean with name 'wel
我是一名优秀的程序员,十分优秀!