我建立了一个网站(在nodejs中),并且datatables jquery插件有问题。一切正常,但问题在于由于所选插件的某些选择字段,数据表需要很长时间才能加载。我有一个脚本(loadsidebar()),可将数据加载到这些选择中,但datatable仅在loadsidebar()脚本完成时显示。当我删除脚本时,数据表会立即显示。
我尝试了很多日志记录以查找问题的根源,并且发现当我在所选数据脚本之前等待100ms时,表会立即加载。因此,此脚本的某些内容阻止了数据表的加载。这并不是真正的解决方案,因为如果该表花费了超过100ms的时间再次加载,则必须等待脚本完成。
我还尝试在数据表的“ initComplete”调用之后调用所选脚本,但是该表也仅在脚本完成后显示。 我真的不知道在initComplete之后甚至不显示该表时还能尝试什么。
我希望这样做的原因是,在表加载之前会有一个空表显示,当表立即加载时,您并不会真正注意到它,因为它加载速度如此之快。
这是所选的脚本。我认为这并不重要。我只是将文本和值设置为相同的变量并选择是否应该选择。
loadSidebar() {
var txt = document.createElement("textarea");
txt.innerHTML = `<%= JSON.stringify(side) %>`;
var side = JSON.parse(txt.value);
for(var i = 0; i < Object.keys(side).length; i++) {
var select = document.getElementsByName(Object.keys(side)[i]);
for(var j = 0; j < side[Object.keys(side)[i]].side.length; j++) {
var selected = false;
if (typeof side[Object.keys(side)[i]].filter !== 'undefined' && side[Object.keys(side)[i]].filter.includes(side[Object.keys(side)[i]].side[j][Object.keys(side)[i]])) {
selected = true;
}
var element = document.createElement("option");
element.textContent = side[Object.keys(side)[i]].side[j][Object.keys(side)[i]];
element.value = side[Object.keys(side)[i]].side[j][Object.keys(side)[i]];
element.selected = selected;
$('#'+Object.keys(side)[i]).append(element);
}
$('#'+Object.keys(side)[i]).trigger("chosen:updated");
}
}
当调用数据表的initComplete时,该脚本开始:
"initComplete": function(settings, json) {
//await Sleep(100) <- waits for 100ms, this works
loadSidebar();
}