2015-05-29 175 views
1

我需要以下完成後執行的回調:等待,直到gobalEval完成

jQuery.globalEval(myUnknownContent); 

但是,myUnknownContent可能有一些阿賈克斯調用。到目前爲止,我使用了100ms的超時,但這不是一個優雅可靠的解決方案。

謝謝你的幫助!

回答

2

您可以使用ajaxSendajaxStop爲:

var onCompletion = function(){ 
    // put here the stuff you want done after all unknown content 
} 
var ajaxSent = false; 
jQuery(document).ajaxSend(function(){ ajaxSent = true }); 
jQuery.globalEval(myUnknownContent); 
if (ajaxSent) { 
    jQuery(document).ajaxStop(onCompletion); 
} else { 
    onCompletion(); // use setTimeout(onCompletion,0) if you want it asynchronous 
} 
+0

注意事項OP:根據上面的'onCompletion'將同步如果,如果有沒有Ajax調用,異步調用。 –

+0

@ T.J.Crowder你認爲這可能是一個問題? –

+0

完全取決於OP的用例。如果它將成爲一個* general *函數(比如承諾的'then'),我會說這肯定是因爲它導致了混亂的結果(事實上,這是jQuery的承諾東西的缺陷之一幸運的是,ES6在這方面正確)。但是,如果它不是一個通用函數,而只是代碼在一個地方執行這個操作,那麼它就無關緊要了。 –