繁体   English   中英

在jquery中进行长轮询的有效方法

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM