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