2014-05-23 33 views
8

Bunun mümkün olup olmadığı veya nasıl gidileceğinden emin değil. Mükemmel bir şekilde çalışan bir $ .ajax yanıtında aşağıdakileri kullanıyorum, ancak döngü yinelendikten sonra loadSlider(); işlevini çağırmam gerekiyor. dizinin üzerinde. Geri arama işlevi .each() tamamlandıktan sonra mı?

if (response.success) 
{ 
    $.each(response.screenshots, function(index, value) { 
     //add the slide 
     $('#slider1').prepend('<li data-id="'+value.screenshot_id+'"><img src="/showimage.php?show='+value.image_filename+'" alt=""></li>'); 
     //add the pager 
     $('#rslides-pager').prepend('<li><a href="javascript:;"># here</a></li>'); 
    }); 

    //want to call loadSlider(); AFTER everything above is completed       
} 
+1

nedenle her kapanış '')} ​​'' –

+2

nedir problem sonrasında arayabilirim? Sen arayabilirsin. – Satpal

+0

Bu ajax - bu her zaman tamamlanmadan önce asenkronize olmaz mı? – user756659

cevap

25

$.each() dolaşır eşzamanlı yüzden sadece $.each(); çağrısından sonra kodunuzu çalıştırabilir.

if (response.success) { 
    $.each(response.screenshots, function(index, value) { 
     // do stuff 
    }); 

    loadSlider(); 
} 

AJAX söz gibi: Sadece gerçek başarı geri arama (büyük olasılıkla yayınlanan kodunu içeren yani fonksiyonu) uyumsuz yürütülür. Bu işlevin içindeki herhangi bir kod senkronize olarak çalışır (orada başka bir zaman uyumsuz işlevi çağırmazsanız).

+1

Bilmiyordum bile ... denemeyi düşünmüyordum, çünkü async'i kabul ettim. Teşekkürler! – user756659

+0

Lol benimle aynı oldu ... Teşekkürler bu soruyu zaten sordun. – Sanuj

-1

Geçen tekrarında sürgüsünü başlatabilir, kolay:

if(response.success) 
{ 
    var count = response.screenshots.length; 
    $.each(response.screenshots, function (index, value) { 
     //add the slide 
     $('#slider1').prepend('<li data-id="' + value.screenshot_id + '"><img src="/showimage.php?show=' + value.image_filename + '" alt=""></li>'); 
     //add the pager 
     $('#rslides-pager').prepend('<li><a href="javascript:;"># here</a></li>'); 
     if (!--count) { 
      //want to call loadslider(); after everything above is completed       
      loadslider(); 
     } 
    }); 
} 
-1

jquery bir jQuery.when() vardır, bu sıfır veya daha fazla nesneler, genellikle Ertelendi nesneler dayanan geri arama fonksiyonlarını yürütmek için bir yol sağlar Eşzamansız olayları temsil eder. belki kodunuzda Şimdi

jquery $.when reference

:

if (response.success) { 
    var iterate = $.each(response.screenshots, function(index, value) { 
     // do stuff 
    }); 

    $.when(iterate) 
    .then( loadSlider, myFailure); 

} 

ilk fonksiyon başarı Geri aramada, diğeri geri çağırma işlevi başarısız üzerindedir.

-2
$.each(response.screenshots, function(index, value) { 

    }).promise().done(function() { 
      //Completed 
}); 

Örnek:

if (response.success) 
{ 
    $.each(response.screenshots, function(index, value) { 
     //add the slide 
     $('#slider1').prepend('<li data-id="'+value.screenshot_id+'"><img src="/showimage.php?show='+value.image_filename+'" alt=""></li>'); 
     //add the pager 
     $('#rslides-pager').prepend('<li><a href="javascript:;"># here</a></li>'); 
    }).promise().done(function() { 
      //Completed 
     }); 


} 
+0

Promise zinciri yöntemi $ .each ile çalışmıyor. – drmartin

İlgili konular