我正在使用jQuery DataTables,我有一个ajax数据源。但是,我想做的是:
processing: true
如何,它都不会继续显示加载横幅,因为它已经完成了对空数据集的处理。我找不到将数据表初始化为“加载”状态的方法,或者在加载数据后填充它。我想避免两个单独的ajax请求(一次用于数据表,另一个用于图表)。
这可能吗?
//Pseudo-code
var myData = [];
var dt = $("#table").dataTables({
processing = true //?? Loading does not remain while ajax request below executes
});
$.getJSON("/api/data", function (data) {
myData = data;
dt.bind(myData); //?? Don't know how to do this
dt.processing = false; //?? Turn off loading message
}
});
答案 0 :(得分:3)
"正在加载" state是默认的。只需删除processing : true
即可。我觉得你在这里试图用大锤来破解坚果。要重用JSON并防止多个AJAX请求,只需使用dataSrc
回调:
function d3Graph(json) {
//initialise the d3 graph here
}
$('#example').DataTable( {
ajax: {
url: "/api/data",
dataSrc: function(json) {
d3Graph(json);
return json;
}
},
...
})
参见此处的示例 - >的 http://jsfiddle.net/7z6aamna/ 强>
通常,有三种方法可以在初始化后使用新数据填充dataTable:
data
变量)table.ajax.reload()
但你不需要那样的东西。您关心的只是重用AJAX数据。
这是您想要完成的内容的骨架。基本上它是上述方法中的第一个。只需为dataTables null
分配一个data
值,然后加载JSON,然后重新初始化dataTable(以及d3图形或其他)。主要"技巧"这里是设置语言选项emptyTable
以显示" 加载数据.. "而不是" 表"中没有数据可用。我把它包装成一个小的javascript文字,只是为了制作一些代码:
var Data = {
data : null,
init : function() {
this.initTable();
this.loadData();
},
loadData : function() {
$.getJSON('https://api.myjson.com/bins/1miqx', function(json) {
Data.data = json;
Data.initTable();
Data.initGraph();
})
},
initTable : function() {
$("#example").DataTable({
destroy : true, //important
data : Data.data,
language : { //important
emptyTable: 'Loading data ...'
},
columns: [
{ "data": "name" },
{ "data": "position" },
{ "data": "office" },
{ "data": "extn" },
{ "data": "start_date" },
{ "data": "salary" }
]
})
},
initGraph : function() {
console.log('initialising d3 graph')
}
}
Data.init();