使用的setTimeout控制轮询间隔jQuery的递归AJAX轮询(jQuery recursiv

2019-06-25 20:00发布

$(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秒。

Answer 1:

看来你已经成功地得到您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)

这应该叫AJAX投票5秒前一个完成后。



Answer 2:

如果要查询每5秒完成最后的请求后不一定5秒,你可以使用的setInterval。 不知道这是可以接受的,但它将使递归不必要的。

function poll() {

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

setInterval(poll, 5000);


Answer 3:

柜面你想使用jQuery的承诺语法,而不是回调的语法这里的另一个整洁的方式。

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

poll();


文章来源: jQuery recursive ajax poll using setTimeout to control the poll interval