I.m目前正在关注如何在不重新加载页面的情况下从MYSQL数据库加载内容的教程。
我只想了解此代码中setTimeout
的用法。这是为了什么?我尝试删除该部分,ajax仍然有效。为什么你需要延迟任务,是不是ajax意味着实时更新?
$(document).ready(function () {
done();
});
function done() {
setTimeout(function () {
updates();
done();
}, 200);
}
function updates() {
$.getJSON("update.php", function (data) {
$("ul").empty();
$.each(data.result, function () {
$("ul").append("<li>ID: " + this['msg_id'] + "</li><br /><li>ID: " + this['msg'] + "</li><br />");
});
});
}
答案 0 :(得分:2)
在该代码中,setTimeout
被用于从服务器获取每秒5次更新(这可能太频繁)。没有它,它只获得一次更新(如果有updates()
被调用)。
答案 1 :(得分:0)
setTimeout出现在done()函数中,当setTimeout执行时(200ms之后),它以递归方式调用自身。因此,updates()函数将在页面的整个生命周期内每200ms调用一次。
如果update.php是某种消息流,则此代码需要setTimeout连续轮询新消息并将它们附加到列表中。
答案 2 :(得分:0)
在代码setTimeout
调用done
函数和updates()
函数后,每200 millisecond
function done() {
setTimeout(function () {
updates();
done();
}, 200);
}
如果你删除setTimeout
就像你一样
function done() {
updates();
done();
}
因为它创建了done
函数
但没有由setTimeout
答案 3 :(得分:0)
函数setTimeout
将函数和数字作为参数,它在给定的毫秒数后执行函数。
在你的代码中,它意味着:函数updates()
每200毫秒调用一次 - 每秒5次。
在这里阅读更多相关信息: https://developer.mozilla.org/en/docs/Web/API/window.setTimeout
答案 4 :(得分:0)
它用于将递归延迟200 ms。如果你删除超时,循环将工作相同,但你可能会在不久之前耗尽内存。
这个例子更有趣/更有启发性的做法是将更新作为回调传递给成功。
答案 5 :(得分:0)
您的代码使用setTimeout进行轮询,无论返回结果的资源如何。
此版本仅在成功的情况下重新执行。
当然,如果您希望代码始终轮询,无论如何都可以从服务器上的错误中恢复,您都不应该更改。但是200 MS在任何情况下都经常发生
$(function () {
updates();
});
function updates() {
$.getJSON("update.php", function (data) {
$("ul").empty();
$.each(data.result, function () {
$("ul").append("<li>ID: " + this['msg_id'] + "</li>"+
"<li> " + this['msg'] + "</li>");
});
setTimeout(updates, 10000); // do it again in 10 seconds
});
}