2

如果我想像这样实现短轮询:

function firstCall(){
   $.ajax({
     ...
     success: function(response){
         if (response.OK == "OK"){
              secondCall();
         }else{
            firstCall();
         }
     }
  });

}

这够了吗?还是我真的需要用 包围firstCall()in else 子句setTimeout?谢谢

4

4 回答 4

5

我建议您使用一点超时,因为现在您正在为服务器创建大量流量。Ajax 速度很快,并且success会经常执行。

所以我建议你改用setTimeoutsetInterval

于 2012-08-08T13:55:31.657 回答
4

此解决方案依赖于第一次调用才能成功。如果您的代码在任何时间点都没有“成功”(可能是服务器出现故障?),您的“轮询”将停止,直到页面刷新。

您可以使用setInterval在定义的时间间隔内调用该方法,从而避免此问题:

setInterval(function(){
    $.ajax({}); // Your ajax here
}, 1000);

使用这两种解决方案,您的服务器将处理大量可能不需要的请求。您可以使用PollJS(无耻的自我插件)之类的库来增加延迟,这将提高性能并减少带宽:

// Start a poller
Poll.start({
    name: "example_poller",
    interval: 1000,
    increment: 200,
    action: function(){
        $.ajax({}); // Your ajax here
    }
});

// If you want to stop it, just use the name
Poll.stop("example_poller");
于 2012-08-08T14:00:01.020 回答
1

setTimeout()如果你想减少对服务器的请求,你需要

于 2012-08-08T13:56:27.487 回答
1

如果您不想等待用户操作或 ajax 响应在一定时间后触发事件,则需要 setTimeout,否则您可能会等待 ajax 调用成功或错误事件。

于 2012-08-08T13:59:16.337 回答