0

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

我从这篇优秀的文章中得到了教育,但我似乎误读了它。

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/秒的速率。有没有办法在调用循环中引入延迟?

4

2 回答 2

1

$.ajax 中的超时并没有按照您的实际想法进行。它只是设置该特定调用的超时时间(允许的最大时间)。您必须将其包装在 setTimeout 函数中。

于 2013-05-03T18:00:03.190 回答
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);
}
于 2014-02-24T20:50:43.007 回答