【问题标题】:Polling every 10 seonds每 10 秒轮询一次
【发布时间】:2013-05-03 17:54:55
【问题描述】:

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

【问题讨论】:

  • 好吧,当它完成时,您正在再次调用该函数 - 我认为您对 timeout 存在误解
  • timeout 不会延迟通话;它只是设置请求可以花费的最长时间。我会在done() 中使用setTimeout(UpdateEstimates, 10000)
  • 这不是长轮询的意思。您只是想定期轮询。长轮询涉及向服务器打开一个请求,并且服务器保持该请求处于打开状态,直到数据可以返回给客户端。我已经进行了相应的编辑。
  • 我试图避免打开和关闭 TCP 连接。这就是我研究长轮询的原因。我引用的文章说“这意味着在 ajax 调用完成并且(至少)三十 (30) 秒过去之前,我们的 poll 函数不会被再次调用。”所以我对超时有一个错误的理解。

标签: jquery polling


【解决方案1】:

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

【讨论】:

  • 或者可选地使用setInterval()
  • setInterval() 将每 10 秒触发一次(或任何设置的时间)。因此,如果您的通话时间超过 10 秒,您可能会有重叠的请求,甚至可能是乱序响应。我不是说不要使用它,只是要理解它会给你带来不同的结果。
  • 好的,我希望不必每次都拆除并打开 TCP 连接。但我想这就是投票不好的原因。不幸的是,WebSockets 还不能用于这个项目。
【解决方案2】:

我建议重新触发“完成”挂钩的超时。 通过这种方式,您可以防止重叠请求。

撕掉“超时”参数 - 正如@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);
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-05-06
    • 2012-04-04
    • 2023-03-29
    • 2017-04-12
    • 1970-01-01
    • 1970-01-01
    • 2012-10-26
    • 1970-01-01
    相关资源
    最近更新 更多