【问题标题】:Long Polling causes Maximum call stack size exceeded长轮询导致超出最大调用堆栈大小
【发布时间】:2014-06-24 15:36:20
【问题描述】:

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

我想在某个时间调用这个函数,然后让长轮询工作,只要画廊有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 或者超时不起作用..

【问题讨论】:

    标签: javascript jquery long-polling


    【解决方案1】:

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

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

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

    【讨论】:

    • 啊,谢谢!认为它可以像 onclick 符号一样被记录下来。谢谢!
    • @NickGinanto 是的,没错。 ;) 回调模式是一样的,你必须传递一个函数在某个事件发生时执行(例如收到网络响应,用户点击一个元素)。
    • @NickGinanto 好吧,本教程使用complete: poll,其中poll 是一个函数引用,所以它本质上是将一个函数传递给complete 选项。它与poll() 不同,后者更接近您的原始案例。 =]
    猜你喜欢
    • 1970-01-01
    • 2023-01-26
    • 2014-11-17
    • 2019-09-09
    • 1970-01-01
    • 2018-08-24
    • 1970-01-01
    • 1970-01-01
    • 2015-10-24
    相关资源
    最近更新 更多