[英]Efficient way to long poll in jquery
我是javascript和jquery的初学者,正在寻找一种有效的方法来在jquery中进行长时间轮询。 我碰到了这段代码,并且对complete属性感到困惑。 我知道'complete'的用法,但是这段代码会导致递归函数调用吗?
(function poll(){
$.ajax({ url: "server", success: function(data){
//Update your dashboard gauge
salesGauge.setValue(data.value);
}, dataType: "json", complete: poll, timeout: 30000 });
})();
提前致谢。 :)
要回答OP问题:
“ complete:poll”将一遍又一遍地调用该函数。 这将导致相当大的带宽,可能的服务器超时,并且如果被足够多的人使用,可能会降低服务器的速度。
您可以通过使用短暂的超时来确保当前的调用堆栈清除来避免递归:
(function poll(){
$.ajax({
url: "server",
success: function(data){
//Update your dashboard gauge
salesGauge.setValue(data.value);
},
dataType: "json",
complete: function () {
setTimeout(poll, 0);
},
timeout: 30000
});
})();
当前执行清除后,这将作为(可能)下一个事件执行poll
。 换句话说,jQuery将执行complete
回调并返回所有内容,直到最终退出其onreadystatechange
回调为止,此时JavaScript运行时将再次执行poll
(除非有其他事件进入并首先进入事件队列) )。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.