每10秒轮询一次

时间:2013-05-03 17:54:55

标签: jquery polling

在下面的代码中,我期望这会创建一个轮询循环,每10秒钟触发一次,从服务器获取“作业状态报告”。它似乎每秒创建超过100个调用。

我从这个优秀的 article 获得了我的教育,但我似乎误读了它。

function UpdateEstimates() {
var request = { jobID: ExportVM.get("ticketID") };
var jqxhr = $.ajax({
    type: "GET",
    url: AppGlobals.serverURL + "GetJobStatus",
    data: request,
    contentType: "application/json; charset=utf-8",
    complete: UpdateEstimates,
    timeout: 10000,
    dataType: "json"
});
jqxhr.done(function (data) { NewEstimates(data); });
jqxhr.fail(function (data) { alert('new estimates request failed'); });

}

呼叫的开销非常低,所以我可以轻松处理1秒更新,但我真的不喜欢连续100 /秒的速率。有没有办法在呼叫循环中引入延迟?

2 个答案:

答案 0 :(得分:1)

$ .ajax中的

超时没有按照你的想法行事。它只设置该特定呼叫的超时(允许的最大时间)。 你必须在setTimeout函数中包装它。

答案 1 :(得分:0)

我建议在'完整'钩子上重新触发超时。 通过这种方式,您可以防止重叠请求。

撕掉'超时'参数 - 因为@ tomca32解释超时是一个需要太长时间的请求。

这将是:

function UpdateEstimates() {
var request = { jobID: ExportVM.get("ticketID") };
var jqxhr = $.ajax({
    type: "GET",
    url: AppGlobals.serverURL + "GetJobStatus",
    data: request,
    complete: scheduleUpdEstimates,
    contentType: "application/json; charset=utf-8",
    dataType: "json"
});
jqxhr.done(function (data) { NewEstimates(data); });
jqxhr.fail(function (data) { alert('new estimates request failed'); });


function scheduleUpdEstimates(){
    setTimeout(function(){ UpdateEstimates(); }, 10000);
}