我们需要setTimeout进行短轮询吗?

时间:2012-08-08 13:52:24

标签: javascript jquery polling

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

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

}

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

4 个答案:

答案 0 :(得分:5)

我建议您使用一点暂停,因为现在您正在为服务器创建大量流量。 Ajax很快,success将经常执行。

所以我建议你改用 setTimeout setInterval

答案 1 :(得分: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");

答案 2 :(得分:1)

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

答案 3 :(得分:1)

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