2014-06-24 69 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 –

相關問題