在AJAX中使用setTimeout函数

时间:2013-08-25 15:22:03

标签: javascript jquery mysql ajax

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 />");
        });
    });
}

6 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分:0)

setTimeout出现在done()函数中,当setTimeout执行时(200ms之后),它以递归方式调用自身。因此,updates()函数将在页面的整个生命周期内每200ms调用一次。

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

答案 2 :(得分:0)

settimeoutsetTimeout

在代码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
    });
}