在下面的代码中,我期望这会创建一个轮询循环,每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 /秒的速率。有没有办法在呼叫循环中引入延迟?
答案 0 :(得分:1)
超时没有按照你的想法行事。它只设置该特定呼叫的超时(允许的最大时间)。 你必须在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);
}