我有一个按钮,如下所示,我以编程方式单击。
document.getElementById("generateButton").click();
此按钮创建一个表并从数据库加载数据。
然后我可以选择对表进行排序,如果在url中指定,表将在加载后进行排序。
if(COL_ONE == "true")
sortTable("COL_ONE");
我的问题是该表大约需要3秒钟才能加载。因此,排序发生的if语句最终会在创建表之前运行。因此,不会发生排序。如果我在if语句中放置一个断点并在if语句处停止执行,并等到我看到表加载,然后运行if语句(通过调试器),那么我的排序确实有效。因此,代码全部正常工作,只需要确定一种方法,直到表加载为止。无论如何我可以这样做,直到表加载,然后运行下一个if语句,我在页面加载时这样做。
答案 0 :(得分:0)
在这种情况下你可以使用回调
function tableLoaded(callback) {
//Code to load the table
callback();
}
在您的主要功能
中tableLoaded(function(){
//have your if statement
if(COL_ONE == "true")
sortTable("COL_ONE");
});
答案 1 :(得分:0)
请发布相关的数据库代码。
但是,我只能猜测它看起来与此类似:document.getElementById("generateButton").addEventListener('click', function() {
var xmlHttp = new XMLHttpRequest();
xmlHttp.onreadystatechange = function() {
if ( xmlHttp.readyState == 4 && xmlHttp.status == 200 ) {
updateTable(xmlHttp.responseText);
}
};
xmlHttp.open("GET", '/get-info-from-db', true);
xmlHttp.send();
});
在这种情况下,这是一个简单的改变:
document.getElementById("generateButton").addEventListener('click', function() {
var xmlHttp = new XMLHttpRequest();
xmlHttp.onreadystatechange = function() {
if ( xmlHttp.readyState == 4 && xmlHttp.status == 200 ) {
updateTable(xmlHttp.responseText);
if(COL_ONE == "true")
sortTable("COL_ONE");
}
};
xmlHttp.open("GET", '/get-info-from-db', true);
xmlHttp.send();
});
答案 2 :(得分:0)
您必须将排序功能放在回调中并将其设置为在数据加载后调用。我注意到你可能正在异步地将数据加载到表中,即在回调函数中加载数据,这可能是为什么排序函数在加载之前就已经开始了...不要这样做,在调用之后立即执行排序加载数据的功能..或许如果你告诉我你是如何加载数据的话会更好,所以我可以通过排序功能直接告诉你何时何地放置回调函数。例如,如果您使用第三方支持来加载数据,您应该尝试在api中查找函数调用以加载也接受回调或完成处理程序的数据。对于回调,您必须以匿名函数的形式传递排序功能。希望这会有所帮助!!