javascript如何在结束后再次运行一个函数

时间:2016-07-21 18:38:05

标签: javascript jquery ajax

我有一个通过ajax更新html页面上的表的函数。这个ajax调用需要很长时间才能完成。我一直认为,一旦ajax调用完成没有内存泄漏,以下代码将再次运行它,因为该函数将在setTimeout中的延迟之前结束。但是,当我使用chrome的开发人员工具查看流程时,我可以看到我的函数makeTable()的许多实例正在运行,我在控制台中收到错误ID。有更好的方法吗?

Approved

4 个答案:

答案 0 :(得分:1)

只需在ajax回调中移动makeYellowTable()函数调用

 function makeTable() {
    $.ajax({
        url: "TableView.asp",
        type: "GET"
    }).done(function (ret) {
        $("#info_display").html(ret);
        makeYellowTable(); //<--- here this function is called only after the ajax completes.
    });

} 
只有在ajax调用完成后才会调用

makeYellowTable()。它将被调用一次。

答案 1 :(得分:1)

setTimeout(makeYellowTable, 5000);

应该在回调函数内完成&#34;完成&#34;

.done(function (ret) {
    $("#info_display").html(ret);
    setTimeout(makeYellowTable, 5000);
});

答案 2 :(得分:1)

使用success来防止错误,并在完成后致电makeYellowTable

function makeTable() {
    $.ajax({
        url: "TableView.asp",
        type: "GET",
        success: function() {
            $("#info_display").html(ret);
            makeYellowTable();

            // or with a timeout again
            // setTimeout(makeYellowTable, 5000);
        }
    });
}

答案 3 :(得分:1)

这里有几个问题。首先,在$ .ajax()调用结束时链接的.done()方法的目的是在响应从服务器返回时调用一些代码。无论你需要做什么逻辑都需要在那里完成,而不是使用setTimeout。其次,你的PHP脚本无法正常工作。如果没有看到代码,我就不知道发生了什么,但看起来有一个错误导致服务器返回500.