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

javascript如何在函数结束后再次运行函数,javascript,jquery,ajax,Javascript,Jquery,Ajax,我有一个函数,可以通过ajax更新html页面上的表。这个ajax调用需要非常长的时间才能完成。我被引导相信,一旦ajax调用完成并且没有内存泄漏,下面的代码将再次运行它,因为函数将在setTimeout延迟之前结束。然而,当我使用chrome的开发者工具查看流程时,我可以看到我的函数makeTable的许多实例正在运行,我得到了加载资源失败的错误:服务器在控制台中以500 Internal server error的状态响应。有更好的方法吗 function makeTable() {

我有一个函数,可以通过ajax更新html页面上的表。这个ajax调用需要非常长的时间才能完成。我被引导相信,一旦ajax调用完成并且没有内存泄漏,下面的代码将再次运行它,因为函数将在setTimeout延迟之前结束。然而,当我使用chrome的开发者工具查看流程时,我可以看到我的函数makeTable的许多实例正在运行,我得到了加载资源失败的错误:服务器在控制台中以500 Internal server error的状态响应。有更好的方法吗

 function makeTable() {
    $.ajax({
        url: "TableView.asp",
        type: "GET"
    }).done(function (ret) {
        $("#info_display").html(ret);
    });
    setTimeout(makeTable, 5000);
 } 
只需将makeYellowTable函数调用移动到ajax回调中即可

 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.
    });

} 
makeYellowTable将仅在ajax调用完成后调用。只需将makeYellowTable函数调用移到ajax回调中即可

 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.
    });

} 
makeYellowTable将仅在ajax调用完成后调用。它将被调用一次。

setTimeout(makeYellowTable, 5000);
应该在回调函数中完成

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

应该在回调函数中完成

.done(function (ret) {
    $("#info_display").html(ret);
    setTimeout(makeYellowTable, 5000);
});
使用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);
        }
    });
}
使用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);
        }
    });
}

你这里有几个问题。首先,链接在$.ajax调用末尾的.done方法的目的是在服务器返回响应时调用一些代码。您需要执行的任何逻辑都需要在其中执行,而不是使用setTimeout。其次,您的php脚本工作不正常。在没有看到代码的情况下,我不知道发生了什么,但似乎有一个错误导致服务器返回500。

这里有几个问题。首先,链接在$.ajax调用末尾的.done方法的目的是在服务器返回响应时调用一些代码。您需要执行的任何逻辑都需要在其中执行,而不是使用setTimeout。其次,您的php脚本工作不正常。如果没有看到这些代码,我不知道发生了什么,但似乎有一个错误导致服务器返回500。

内部服务器错误与Javascript无关,除非通过AJAX发送错误值。为什么不在内部完成调用?内部服务器错误与Javascript无关除非您通过AJAX发送错误的值。为什么不在内部完成调用?这不会导致内存泄漏吗,因为第一个函数从技术上讲永远不会结束?我注意到OP试图在setTimeout内部调用的函数makeYellowTable与函数makeTable不同:这会不会导致内存泄漏,因为第一个函数从技术上讲永远不会结束?我注意到OP试图在setTimeout内调用的函数makeYellowTable与makeTable不是同一个函数:没有php脚本。对不起,是你的.asp,不是php。使用$.ajax调用的服务返回500错误。确定。你知道为什么它第一次会正确运行,但是在所有其他调用上都会抛出错误吗?这种行为让我相信我再次调用它的方式是不正确的。如果没有看到代码,我就无法知道是什么导致了错误。你能在调试器中单步执行代码吗?这会给你一个更好的主意。没有php脚本。对不起,你的.asp,不是php。使用$.ajax调用的服务返回500错误。确定。你知道为什么它第一次会正确运行,但是在所有其他调用上都会抛出错误吗?这种行为让我相信我再次调用它的方式是不正确的。如果没有看到代码,我就无法知道是什么导致了错误。你能在调试器中单步执行代码吗?那会给你一个更好的主意。