每10个轮询一次

在下面的代码中,我期望这会创建一个轮询循环,每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 /秒速率。 有没有办法在调用循环中引入延迟?

$ .ajax中的超时不是你实际想的。 它只是设置该特定呼叫的超时(最大允许时间)。 您必须在setTimeout函数中包装它。

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

撕下’超时’参数 – 因为@ 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); } 
Interesting Posts