【发布时间】:2018-04-14 14:53:28
【问题描述】:
我正在尝试执行 Ajax 调用以检查数据库表是否已使用某些特定的新数据进行更新。
我在这个question 中找到了部分解决方案:而不是使用while 循环(显然会淹没浏览器),应该使用两个独立的函数,其中一个使用setTimeout(fn,0)(解释为什么这样技巧成功地允许 Ajax 调用不重叠和淹没浏览器here 和这个video)。
我的问题是:如何强制每次 Ajax 调用之间有一个特定的时间间隔?我试过设置一个优于 0 的时间(例如 setTimeout(checkNewData(), 7000);
),但这似乎对每个 Ajax 调用之间的实际延迟没有影响:一旦完成,下一个就开始。
注意:在下面的示例中,我有一个开/关开关(存储在autoload_switch),可以切换以中断进程
checkNewData() //starts the looping function
function checkIfAutoLoadOn(){
if(autoload_switch === "on")
setTimeout(checkNewData(), 7000);
}
function checkNewData() {
//Check if solutions
$.ajax({
async: true,
type: "POST",
url: "cgi-bin/check_NewData.py",
contentType: "application/x-www-form-urlencoded;charset=ISO-8859-15",
data: JSON.stringify(data_refs),
dataType: "json"
})
.done(function(result) {
if (result["new_data"]==="true") {
// Do sth with data
} else if (result["new_data"]==="false") {
//Check again in some seconds if new data arrived
checkIfAutoLoadOn()
}
})
}
【问题讨论】:
-
我想你想要
setInterval()。 -
checkNewData()执行查询并将结果作为参数返回给setTimeout。您想通过省略括号来传递引用。 (所以setTimeout(checkNewData, 7000);)(正如AjAX所提到的,使用setInterval重复它而不是执行一次。 -
@AjAX。谢谢,但我也尝试过 setInterval(),但我相信它不会像
setTimeout(fn, 0)那样阻止 ajax 调用重叠。 -
@Ivar 感谢您详细说明:我没有意识到使用括号会产生这种后果。但确实删除它们可以考虑毫秒数。请注意,我不必为此使用
setInterval()。如果您想发表评论作为答案,我很乐意接受。 -
@sc28 如果这是唯一的问题,最好将其作为副本关闭。
标签: javascript ajax settimeout