Javascript JQuery DataTables列使用数据自动初始化
我有一个JQuery数据表,我已经使用它一段时间了,我想我在这里遗漏了一些东西 然而,我最近遇到了直接绑定JSON数据的需求之一 例如,我的JSON看起来像来自API:Javascript JQuery DataTables列使用数据自动初始化,javascript,jquery,jquery-ui,data-binding,datatables,Javascript,Jquery,Jquery Ui,Data Binding,Datatables,我有一个JQuery数据表,我已经使用它一段时间了,我想我在这里遗漏了一些东西 然而,我最近遇到了直接绑定JSON数据的需求之一 例如,我的JSON看起来像来自API: [{"componentNumber":"ABC","factory":"India","productNumber":"CR","productRevisionState":"123","placementTimeLocal":"2018-08-21T00:00:00","position":"up"},{"component
[{"componentNumber":"ABC","factory":"India","productNumber":"CR","productRevisionState":"123","placementTimeLocal":"2018-08-21T00:00:00","position":"up"},{"componentNumber":"ABC","factory":"India","productNumber":"CR","productRevisionState":"123","placementTimeLocal":"2018-08-21T00:00:00","position":"up"},
{"componentNumber":"ABC","factory":"India","productNumber":"CR","productRevisionState":"123","placementTimeLocal":"2018-08-21T00:00:00","position":"up"}]
我知道我可以使用JSON并在Jquery中提取列,然后将其传递给Datatables列,但是如果有一种简单的方法Datatable自动提取列,我想知道的是:
$.ajax({
type: "Post",
url: "http://localhost:5555/myapi",
contentType: "application/json; charset=utf-8",
dataType: "json",
success: function (data) {
//datasource = data;
$('#myTable').DataTable({
"Data": JSON.parse(data),
"Columns" : JSON.parse(data)
});
},
error: function (err) {
alert(err);
}
})
我看到的是:
$.ajax({
type: "Post",
url: "http://localhost:5555/myapi",
contentType: "application/json; charset=utf-8",
dataType: "json",
success: function (data) {
// **how to get rid of this loop? for looping columns**
var adColumns = [];
$.each(data[0], function (i, item) {
var col = {
data: i,
title: i
};
adColumns.push(col);
})
//datasource = data;
console.log(data);
$('#myTable').DataTable({
"data": data,
"info": true,
"paging": true,
"columns": adColumns
});
},
error: function (err) {
alert(err);
}
})
DataTables能够从Ajax可以获得的几乎任何JSON数据源读取数据。通过将
ajax
选项设置为JSON数据源的地址,可以以最简单的形式实现这一点。看
对于JSON,这里有一个尝试以下代码。它可能会帮助你达到预期的结果。这可能不是一个优化的代码 希望这有帮助 编辑 创建列名数组至少需要一个循环。因此,您还可以使用以下代码来消除多个循环
var adColumns = [];
Object.keys(strData[0]).forEach(key => {
var col = {
data: key,
title: key
};
adColumns.push(col);
});
$(函数(){
变量strData=[{
“组件编号”:“ABC”,
“工厂”:“印度”,
“产品编号”:“CR”,
“productRevisionState”:“123”,
“placementTimeLocal”:“2018-08-21T00:00:00”,
“位置”:“向上”
}, {
“组件编号”:“ABC”,
“工厂”:“印度”,
“产品编号”:“CR”,
“productRevisionState”:“123”,
“placementTimeLocal”:“2018-08-21T00:00:00”,
“位置”:“向上”
},
{
“组件编号”:“ABC”,
“工厂”:“印度”,
“产品编号”:“CR”,
“productRevisionState”:“123”,
“placementTimeLocal”:“2018-08-21T00:00:00”,
“位置”:“向上”
}
];
/*var dta=标准数据;
var tableColumnNames=[];
var键=[];
用于(标准数据中的变量i){
var-key=i;
var val=标准数据[i];
for(var j在val中){
var sub_key=j;
按键。按下(sub_键);
}
}
var sColumns=Array.from(新集合(键));
var adColumns=[];
for(sColumns中的变量列){
var sKey=sColumns[col];
变量列={
资料来源:斯凯,
标题:斯凯
};
adColumns.push(col);
}*/
var adColumns=[];
Object.key(strData[0]).forEach(key=>{
变量列={
数据:关键,
标题:钥匙
};
adColumns.push(col);
});
$('#myTable')。数据表({
“数据”:标准数据,
“columns”:JSON.parse(JSON.stringify(adColumns))
});
});代码>
我的列可以随时更改,因此我不想明确定义它们。正如您所调用的Ajax一样,Datatable可以直接将列名作为JSON作为键和值对并绑定,而无需在HTML或JQUERYplease中的任何位置指定它。请参考此链接并仔细检查JSON数据的原样。谢谢。你的代码运行得很好,但是我想摆脱循环!我已经更新了我的问题,它使用1个循环,但是如果无论如何我可以摆脱所有这些循环,在我看来,至少一个循环是必要的。我接受你的答案,使用1个循环,但是遗憾的是Datatable没有自动获取列。你还有其他数据表可以快速完成任务吗?@NipunAmbastha还有另一个插件叫jqgrid,但我不太熟悉。请检查一下。