长轮询导致超出最大调用堆栈大小

时间:2014-06-24 15:36:21

标签: javascript jquery long-polling

我有这个(尝试)长轮询功能

我想在一定时间内调用此函数,然后只要图库具有updating类就进行长轮询工作,在这种情况下图库为$("... ")

function pollGallery(gallery){
    if (gallery.hasClass("updating")){
        var url = gallery.data("base") + "/refresh";
        $.ajax({ url: url, dataType: "script", complete: pollGallery(gallery), timeout: 30000 });
    }   
}

当我运行这个时,我得到Maximum call stack size exceeded并且从日志中看起来好像它没有调用ajax或者超时没有工作..

1 个答案:

答案 0 :(得分:3)

您的代码没有将回调函数传递给complete,它只是无限地递归调用函数。

    $.ajax({ url: url, dataType: "script", complete: function() {
        pollGallery(gallery);
    }, timeout: 30000 });

complete期望传递功能。通过complete: pollGallery(gallery),您立即调用pollGallery(gallery)并尝试将其返回值分配给complete选项,从而陷入无限递归循环。