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

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 に答える
0

再帰を200ミリ秒遅らせるために使用されています。タイムアウトを削除すると、ループはまったく同じように機能しますが、すぐにメモリ不足になる可能性があります。

この例のより興味深い/有益な解釈は、done をコールバックとして update に渡し、成功時にそれを呼び出すことです。

于 2013-08-25T15:32:55.157 に答える
0

setTimeout は done() 関数に表示され、setTimeout が実行されると (200 ミリ秒後)、それ自体が再帰的に呼び出されます。したがって、ページの存続期間中、updates() 関数は 200 ミリ秒ごとに呼び出されます。

update.php がある種のメッセージ ストリームである場合、このコードでは setTimeout が新しいメッセージを継続的にポーリングし、それらをリストに追加する必要があります。

于 2013-08-25T15:27:56.653 に答える