长轮询太快了

时间:2015-08-10 14:52:33

标签: javascript jquery

(function poll() {
    $.ajax({
        url: "/Home/Tail", success: function (data) { 
            console.log(data);
        },
        data: { datetime: getISODateTime(new Date()) },
        dataType: "json", 
        timeout: 30000
    });
})();

我有上面的代码,我正在对端点进行长时间轮询。

然而,它太快了。它不应该在每个超时秒内完成吗?

2 个答案:

答案 0 :(得分:2)

  

然而,它太快了。不应该每次超时都这样做   秒?

此处

timeout属性只会超时调用,然后触发错误。如果你觉得它太快了,你必须在上面发布的代码之外做其他事情。

为了进行长轮询,一种方法是在收到回复时使用Javascript setTimeout。此外,在这种情况下,您应该在某处找到中止。

例如这将每3秒轮询一次):

<button id="start">Start</button>
<button id="stop">Stop</button>


var timer;
function poll() {
    $.ajax({
        url: "/echo/json/", success: function (data) { 
            console.log(data);
            timer = setTimeout(poll, 3000);
        },
        data: { datetime: new Date()},
        dataType: "json", 
        timeout: 30000
    });
};
$("#start").on("click", function() { console.log("started.."); poll(); });
$("#stop").on("click", function() { console.log("stopped.."); clearTimeout(timer); });

小提琴:http://jsfiddle.net/abhitalks/rf0uaaLj/

答案 1 :(得分:-1)

您可以使用ajax选项中的timeout设置,如下所示:

(function poll() {
    $.ajax({
        url: "/Home/Tail", success: function (data) { 
            console.log(data);
        },
        timeout: 30000,
        data: { datetime: getISODateTime(new Date()) },
        dataType: "json"
    });
})();

阅读有关ajax选项here

的所有信息