2011-09-22 38 views
1

我打電話給第三方提供的javascript函數。這個函數在返回之前觸發一些ajax /異步請求,並且(不確定地)既不允許我傳遞迴調,也不返回任何它正在進行的異步調用的引用。掛鉤到異步JavaScript調用的結尾

有沒有什麼辦法可以在所有調用完成時觸發某些東西? 有沒有一種方法可以跟蹤從JavaScript函數啓動的「調用」?原諒我的術語;我是一個JavaScript初學者。

回答

1

這是從外部來源加載的庫,還是您有自己的本地副本?在後一種情況下,你可以修補代碼來做你想做的事情。否則,我真的沒有辦法直接攔截電話。

如果您確切知道每個完成的異步調用會發生什麼狀態更改,您可以設置一個函數以間隔執行(setInterval(fn,millis)),並檢查是否所有這些狀態都已滿足。然後,您可以啓動某種最終功能來指示完成。

即:

var completionHandler = function() {  /* do something awesome */ } 

var checkCompletion = function() { 
    if (state1 && state2 && state3) { 
     clearInterval(interval); // make sure you clear the interval. 
     completionHandler(); 
    } 
} 

var interval = setInterval(checkCompletion, 200); 
+0

它從外部來源加載。我可以走這條醜陋的路線:修補它並在當地依靠它,但我想知道是否有更好的方法。 –

+0

+1提到setInterval,我沒有意識到存在! –

+0

:)謝謝。您可能會在Mozilla JS參考中找到其他一些有用的項目:https://developer.mozilla.org/en/JavaScript/Reference – Gopherkhan

1

如果您的第三方腳本是基於jQuery的你可以嘗試修改與$ .ajaxSetup ajax的行爲(),設置上下文對象和ajaxComplete處理程序綁定到該對象。但這可能會搞亂第三方圖書館。

+0

雖然這對我不起作用,但值得一提的是可以查看各種全局ajax可能性這裏:http://api.jquery.com/?ns0=1&s=ajax –