Sto utilizzando le seguenti funzioni Javascript per visualizzare una galleria di immagini.Javascript/JQuery - come chiamare una funzione al completamento della funzione precedente
function disp_pics(currObj,table){
if(currObj != "none"){
$("div .checkout2").removeClass("checkout2").addClass("checkout");
$(currObj).closest("div").removeClass("checkout").addClass("checkout2");
}
function getData(table){
return $.ajax({
url: "newphoto_gallery_display.php",
type: "GET",
data: {
table: table
},
dataType: "html"
});
}
function display_result(data){
var dfd = new $.Deferred();
dfd.done(equalise);
$("#ajaxoutput").html(data);
setTimeout(function() {
dfd.resolve();
}, 1000);
}
function equalise(){
var highestBox = 0;
$('.photodisplay').each(function(){
if($(this).height() > highestBox) {
highestBox = $(this).height();
}
});
$('.photodisplay').height(highestBox);
}
var promise=getData(table);
promise.success(function (data) {
promise.done(display_result(data));
});
};
La funzione getData recupera i dati delle immagini da un database. La funzione display_result invia quindi i dati al div id "ajaxoutput". Le immagini vengono visualizzate insieme ai dati rilevanti nelle caselle (tabelle HTML con un bordo). La funzione equalize viene quindi chiamata per rendere tutte le caselle di uguale altezza.
Senza il ritardo nel display_result viene richiamata la funzione di equalizzazione prima che tutte le immagini e i dati siano stati visualizzati e quindi confonda il display. C'è un modo per eliminare il ritardo e chiamare la funzione equalize solo quando display_result ha terminato l'output di tutti i dati sul div ajaxoutput?
Ho provato tutti i tipi di combinazioni Deferred e $ .quando ....... poi ...., ma non sono riuscito a ottenere il risultato desiderato senza ritardare lo script, che non è l'ideale . Qualsiasi suggerimento sarebbe benvenuto.
Qual è il promise.done dovrebbe realizzare? È già fatto attraverso il successo. – Scottie
È possibile utilizzare callback o promesse –