等待.each()完成,给定.each()具有AJAX调用

可能重复:
仅在.each()完成后继续执行

这个问题实际上是这次讨论的延续。 如果在其回调函数中有$.get() ,我们如何等待each()完成执行?

可以在这里找到工作示例。

 /* JavaScript / jQuery. */  function prepareLayer($n) { $.get('./a.html', function(data) { /* a.html contains: Click me! */ $n.html(data); }); } function postPreparation() { $('.element a').click(function() { alert('Ouch... you just clicked me!'); }); } $(function() { $('.element').each(function() { prepareLayer($(this)); }); postPreparation(); });   

@Alnitak在这个问题中为您提供了大部分解决方案: 仅在.each()完成后继续执行

 var def = []; $('.element').each(function() { // have prepareLayer return a _promise_ to return def.push(prepareLayer()); } // use "when" to call "postPreparation" once every // promise has been resolved $.when.apply($, def).done(postPreparation); 

丢失的部分看起来像

 function prepareLayer($n) { var dfd=$.Deferred(); $.get('./a.html', function(data) { /* a.html contains: Click me! */ $n.html(data); dfd.resolve(); }); return dfd.promise(); } 

或者使用jQuery> = 1.8,@ jfriend00提供

 function prepareLayer($n) { return $.get('./a.html').then(function(data) { $n.html(data); }); }