javascript如何在函数结束后再次运行函数
我有一个函数,可以通过ajax更新html页面上的表。这个ajax调用需要非常长的时间才能完成。我被引导相信,一旦ajax调用完成并且没有内存泄漏,下面的代码将再次运行它,因为函数将在setTimeout延迟之前结束。然而,当我使用chrome的开发者工具查看流程时,我可以看到我的函数makeTable的许多实例正在运行,我得到了加载资源失败的错误:服务器在控制台中以500 Internal server error的状态响应。有更好的方法吗javascript如何在函数结束后再次运行函数,javascript,jquery,ajax,Javascript,Jquery,Ajax,我有一个函数,可以通过ajax更新html页面上的表。这个ajax调用需要非常长的时间才能完成。我被引导相信,一旦ajax调用完成并且没有内存泄漏,下面的代码将再次运行它,因为函数将在setTimeout延迟之前结束。然而,当我使用chrome的开发者工具查看流程时,我可以看到我的函数makeTable的许多实例正在运行,我得到了加载资源失败的错误:服务器在控制台中以500 Internal server error的状态响应。有更好的方法吗 function makeTable() {
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错误。确定。你知道为什么它第一次会正确运行,但是在所有其他调用上都会抛出错误吗?这种行为让我相信我再次调用它的方式是不正确的。如果没有看到代码,我就无法知道是什么导致了错误。你能在调试器中单步执行代码吗?那会给你一个更好的主意。