2014-05-23 19 views
8

Nicht sicher, ob das möglich ist oder wie es geht. Ich benutze das folgende in einer $ .ajax Antwort, die tadellos funktioniert, jedoch muss ich die Funktion loadSlider(); NACH dem Ende der Schleife iterating nennen.Rückruffunktion, nachdem .each() abgeschlossen wurde?

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

so können Sie nach jedem Schließen rufen '')} ​​'' –

+2

Was das Problem? Du kannst es anrufen. – Satpal

+0

Es ist Ajax - wird dies nicht asynchron geschehen, also bevor beide abgeschlossen sind? – user756659

Antwort

25

$.each() iteriert über die Anordnung synchron, so können Sie einfach Ihren Code nach dem $.each(); Anruf auszuführen.

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

    loadSlider(); 
} 

Wie Sie AJAX erwähnen: Nur der tatsächliche Erfolg Callback (das heißt die Funktion, die am ehesten den Code enthält, die Sie geschrieben) asynchron ausgeführt wird. Jeder Code innerhalb dieser Funktion wird synchron ausgeführt (außer Sie rufen dort natürlich eine andere asynchrone Funktion auf).

+1

Wusste das nicht ... dachte nicht einmal daran zu versuchen, weil ich async angenommen habe. Vielen Dank! – user756659

+0

Lol gleich passiert mit mir ... Danke dir diese Frage schon gestellt. – Sanuj

-1

Sie können Schieber in der letzten Iteration starten, ist es einfach:

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 eine jQuery.when hat(), das einen Weg Callback-Funktionen basierend auszuführen bietet auf Null oder mehrere Objekte, in der Regel latente Objekte das sind asynchrone Ereignisse.

jquery $.when reference

jetzt vielleicht in Ihrem Code:

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

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

} 

Die erste Funktion ist auf Erfolg Rückruf und die andere Funktion ist auf Rückruf fehlschlagen.

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

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

Probe:

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

Die Methode der Versprechenskette funktioniert nicht mit $ .each. – drmartin

Verwandte Themen