5
$(document).ready(function() {
    (function poll() {
        setTimeout(function() {
            $.ajax({
                url: "/project1/api/getAllUsers",
                type: "GET",
                success: function(data) {
                    console.log("polling");
                },
                dataType: "json",
                complete: poll,
                timeout: 5000
            }), 5000
        });
    })();
});​

これはサーバーが応答できる限り速く実行し続けますが、5秒ごとにのみポーリングすることを望んでいました。助言がありますか?

編集:追加する必要があります。リクエストが完了してから5秒後が望ましいでしょう。

4

3 に答える 3

7

setTimeout遅延引数を間違った場所に書き込むことができたようです。

$(document).ready(function() {
  (function poll() {
    setTimeout(function() {
        $.ajax({
            url: "/project1/api/getAllUsers",
            type: "GET",
            success: function(data) {
                console.log("polling");
            },
            dataType: "json",
            complete: poll,
            timeout: 5000
        }) //, 5000  <-- oops.
    }, 5000); // <-- should be here instead
  })();
});​

setTimeout中かっこに従うと、次のように呼び出していることがわかります。

setTimeout(function () {
    $.ajax(), 5000
})

とする必要があります

setTimeout(function () {
    $.ajax();
}, 5000)

これにより、前のポーリングが完了してから5秒後にAJAXポーリングが呼び出されます。

于 2012-06-27T11:41:03.300 に答える
1

最後のリクエストの完了後5秒ごとにポーリングする必要があり、必ずしも5秒ごとにポーリングする必要がない場合は、setIntervalを使用できます。それが許容できるかどうかはわかりませんが、再帰は不要になります。

function poll() {

            $.ajax({
                url: "/project1/api/getAllUsers",
                type: "GET",
                success: function(data) {
                    console.log("polling");
                },
                dataType: "json"
        });
    }

setInterval(poll, 5000);
于 2012-06-27T10:16:01.693 に答える
0

コールバック構文ではなく、jQueryのpromise構文を使用したい場合は、別の整然とした方法があります。

function poll() {
    $.get('http://your-api-endpoint.com')
    .done(function() {
        // 200 - OK response
    })
    .fail(function() {
        // Error Response
    })
    .always(function () {
        setTimeout(function() {
            poll();
        }, 5000);
    });
}

poll();
于 2018-02-01T13:42:15.967 に答える