2015-05-29 158 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在这方面正确)。但是,如果它不是一个通用函数,而只是代码在一个地方执行这个操作,那么它就无关紧要了。 –