如何等待按钮完成其任务然后执行下一行代码

时间:2014-08-29 17:20:15

标签: javascript

我有一个按钮,如下所示,我以编程方式单击。

document.getElementById("generateButton").click();

此按钮创建一个表并从数据库加载数据。

然后我可以选择对表进行排序,如果在url中指定,表将在加载后进行排序。

if(COL_ONE == "true")
            sortTable("COL_ONE");

我的问题是该表大约需要3秒钟才能加载。因此,排序发生的if语句最终会在创建表之前运行。因此,不会发生排序。如果我在if语句中放置一个断点并在if语句处停止执行,并等到我看到表加载,然后运行if语句(通过调试器),那么我的排序确实有效。因此,代码全部正常工作,只需要确定一种方法,直到表加载为止。无论如何我可以这样做,直到表加载,然后运行下一个if语句,我在页面加载时这样做。

3 个答案:

答案 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中查找函数调用以加载也接受回调或完成处理程序的数据。对于回调,您必须以匿名函数的形式传递排序功能。希望这会有所帮助!!