0

我目前正在关注有关如何在不重新加载页面的情况下从 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 />");
        });
    });
}
4

6 回答 6

2

在该代码中,setTimeout它被用于每秒 5 次从服务器获取更新(这可能太频繁了)。没有它,它只会获得一次更新(如果updates()曾经调用过)。

于 2013-08-25T15:25:06.213 回答
0

setTimeout 出现在 done() 函数中,当 setTimeout 执行时(200 毫秒后),它会递归调用自身。因此,updates() 函数将在页面生命周期内每 200 毫秒调用一次。

如果 update.php 是某种消息流,则此代码需要 setTimeout 不断轮询新消息并将它们附加到列表中。

于 2013-08-25T15:27:56.653 回答
0

设置超时和设置超时

在你的代码setTimeout调用done函数和updates()函数之后200 millisecond

function done() {
    setTimeout(function () {
        updates();
        done();
    }, 200);
}

像你一样,如果你删除setTimeout它仍然有效

  function done() {
            updates();
            done();
    }

因为它创建了无限循环的done功能

但没有延迟,这是由setTimeout

于 2013-08-25T15:28:09.970 回答
0

该函数setTimeout以一个函数和一个数字作为参数,它在给定的毫秒数后执行该函数。

在您的代码中,这意味着:该函数updates()每 200 毫秒调用一次 - 每秒 5 次。

在此处阅读更多信息: https ://developer.mozilla.org/en/docs/Web/API/window.setTimeout

于 2013-08-25T15:28:55.037 回答
0

它被用来将递归延迟 200 毫秒。如果您删除超时,循环将照常工作,但您可能很快就会耗尽内存。

对这个例子更有趣/更有启发性的做法是将 done 作为回调传递给更新,并在成功时调用它。

于 2013-08-25T15:32:55.157 回答
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
    });
}
于 2013-08-25T15:35:25.337 回答