【发布时间】:2015-09-29 01:31:44
【问题描述】:
这与问题here 相关联。但是,我的情况有点不同。我想从另一个问题here 中实现相同的数据表示例。如您所见,您必须传递列名才能初始化表头,如下所示
"columns": [
{ "data": "name" },
{ "data": "position" },
{ "data": "office" },
{ "data": "extn" },
{ "data": "start_date" },
{ "data": "salary" }
]
问题是我不会事先知道标题名称,因为它们会改变。当我使用第三个变量从 ajax 获取数据时,我尝试初始化列名(如下所示)(请参阅“注意这一行”的位置,但这不起作用。
//PAY ATTENTION TO THIS LINE
var columnsHeaders = [];
var ab = $('#dynamicScenarioTable').DataTable({
"bDestroy": true,
"dom": 'T<"clear">lfrtip',
"ajax": {
"type": "POST",
"url": "dynamicScenario.htm",
"data": tags,
"dataType": "json",
"dataSrc": function(json){
//PAY ATTENTION TO THIS LINE
columnsHeaders.push({"data": json.header });
return json.vals;
},
"error": function(exception)
{
displayMessageOnError();
}
},
//PAY ATTENTION TO THIS LINE
"columns": [columnsHeaders],
tableTools: tableDefaultS.tableTools
});
有什么想法吗?
【问题讨论】:
-
你为什么不知道数据?它可以是来自某种形式的动态输入,也可以是 AJAX 请求的一部分。你应该能够得到标题。
-
因为列字段的数量以及它们的名称都会改变。我可以在 json 文件中循环查找它们的编号,正如我在上面的示例中所展示的那样。但是,我不知道如何在之后将其分配给列字段
-
如果标题在变化,那么数据也在变化。为什么不直接重新创建表?
-
这是否意味着我必须通过附加 tr 和 tds 来动态构建表,然后调用 datatables?
-
不一定,可能还有其他方法。只是给你其他选择。
标签: javascript jquery ajax datatable