2012-08-08 62 views
2

如果我要实现对短轮询是这样的:我们是否需要setTimeout进行短轮询?

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

} 

这会不会不够?或者我真的需要在setTimeout的else子句中围绕firstCall()?谢谢

+6

有多难,你想打你的服务器?这可能会导致每秒超过10个请求。另外,你应该处理AJAX错误。 – josh3736 2012-08-08 13:54:12

+1

这种侵略有很多很好的选择,“我们在那里吗?”轮询。这真的是你唯一的选择吗? – 2012-08-08 13:59:55

+0

哦,geesh。感谢您指出。这很明显。 @詹姆斯麦克劳林想分享? – user1012451 2012-08-08 14:00:18

回答

5

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

所以我建议你使用setTimeoutsetInterval改为!

+0

谢谢。哇。你是对的...每次递归调用都会......吹掉它。 – user1012451 2012-08-08 14:00:43

+0

是的,我会用setTimeout或setInterval代替这个解决方案 – tuxtimo 2012-08-08 14:03:02

1

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

+0

感谢您的帮助! – user1012451 2012-08-08 14:07:09

1

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

+0

感谢您的帮助:) – user1012451 2012-08-08 14:07:39

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"); 
相关问题