如果我想实现这样的短轮询:
function firstCall(){
$.ajax({
...
success: function(response){
if (response.OK == "OK"){
secondCall();
}else{
firstCall();
}
}
});
}
这还够吗?或者我真的需要用firstCall()
包围setTimeout
in else子句吗?谢谢
答案 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调用成功或错误事件。