0

コードを持っています。

setInterval(somefunc, 1000);

function somefunc() {
    curid = $(".chat-message:last").attr("id");
    $.post("http://blah.com/blah.php&last_msg_id=" + curid, function (data) {

        $('.chat-messages').append(data);
    });
}

function saveChat() {
    var texts = $('#chatText').val();

    var request = $.ajax({
        type: "POST",
        url: "http://blah.com/submit.php",
        data: {
            text: texts
        },
        dataType: "html"
    });

    request.done(function (msg) {
        somefunc();
    });
}

問題は、saveChat が interval と同時に実行されることがあり、somefunc が .chat-messages に追加する情報が重複することです。どうすれば回避できますか?somefunc() の前の実行が完全に終了した場合にのみ、関数 somefunc() を再度実行できる関数が必要です。または、関数 somefunc() を同時に 2 回実行できないようにするだけです。

4

1 に答える 1

5

を使用せずsetInterval、ネストしsetTimeoutます:

setTimeout(somefunc, 1000);
function somefunc() {
    //snip
    $.post().done(function () { setTimeout(somefunc, 1000); });
}
于 2013-02-08T16:49:04.467 に答える