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

时间:2013-08-09 18:34:23

标签: javascript jquery ajax long-polling

我是javascript和jquery的初学者,并且正在寻找一种在jquery中进行长轮询的有效方法。 我遇到了这段代码,并对属性完成:感到困惑。我知道使用'complete'但是这段代码会导致递归函数调用吗?

(function poll(){
    $.ajax({ url: "server", success: function(data){
        //Update your dashboard gauge
        salesGauge.setValue(data.value);

    }, dataType: "json", complete: poll, timeout: 30000 });
})();

提前致谢。 :)

2 个答案:

答案 0 :(得分:1)

回答OP问题:

“complete:poll”将一遍又一遍地调用该函数。这将导致相当多的带宽,可能的服务器超时,如果有足够的人使用可能会降低服务器速度。

答案 1 :(得分:0)

您可以通过使用短暂超时来避免递归,以确保当前调用堆栈清除:

(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(除非另有事件当然,他首先进入了事件队列。