我打電話給第三方提供的javascript函數。這個函數在返回之前觸發一些ajax /異步請求,並且(不確定地)既不允許我傳遞迴調,也不返回任何它正在進行的異步調用的引用。掛鉤到異步JavaScript調用的結尾
有沒有什麼辦法可以在所有調用完成時觸發某些東西? 有沒有一種方法可以跟蹤從JavaScript函數啓動的「調用」?原諒我的術語;我是一個JavaScript初學者。
我打電話給第三方提供的javascript函數。這個函數在返回之前觸發一些ajax /異步請求,並且(不確定地)既不允許我傳遞迴調,也不返回任何它正在進行的異步調用的引用。掛鉤到異步JavaScript調用的結尾
有沒有什麼辦法可以在所有調用完成時觸發某些東西? 有沒有一種方法可以跟蹤從JavaScript函數啓動的「調用」?原諒我的術語;我是一個JavaScript初學者。
這是從外部來源加載的庫,還是您有自己的本地副本?在後一種情況下,你可以修補代碼來做你想做的事情。否則,我真的沒有辦法直接攔截電話。
如果您確切知道每個完成的異步調用會發生什麼狀態更改,您可以設置一個函數以間隔執行(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);
如果您的第三方腳本是基於jQuery的你可以嘗試修改與$ .ajaxSetup ajax的行爲(),設置上下文對象和ajaxComplete處理程序綁定到該對象。但這可能會搞亂第三方圖書館。
雖然這對我不起作用,但值得一提的是可以查看各種全局ajax可能性這裏:http://api.jquery.com/?ns0=1&s=ajax –
它從外部來源加載。我可以走這條醜陋的路線:修補它並在當地依靠它,但我想知道是否有更好的方法。 –
+1提到setInterval,我沒有意識到存在! –
:)謝謝。您可能會在Mozilla JS參考中找到其他一些有用的項目:https://developer.mozilla.org/en/JavaScript/Reference – Gopherkhan