2014-06-24 43 views
1

我有这个(的努力)长轮询功能长轮询导致最大调用堆栈大小超出

我想只要画廊有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或超时不工作..

回答

3

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

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

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

+0

啊谢谢!认为可以像onclick符号那样注意到它。谢谢! –

+0

@NickGinanto是的,正好。 ';)'回调模式是一样的,当某个事件发生时(例如收到网络响应,用户点击一个元素),你必须传递一个函数来执行。 –

+0

我责备这个http://techoctave.com/c7/posts/60-simple-long-polling-example-with-javascript-and-jquery –

相关问题