PDA

View Full Version : [JS/jQuery] Eseguire un'istruzione quando tutte le richieste Ajax sono terminate


kwb
06-07-2013, 22:13
Come da titolo, sto sbattendo la testa su questo problema. Il codice ( parziale ) è il seguente:

$('td.download').each(function(i,Elem){
res=$(this).siblings().eq(0).children('a.chapterLink').attr('href').split('/');
link=Elem.baseURI+res[3]+'/'+res[4];
$.get(link,function(data){
var image=$(data).find('#mainImg')[0].src;
imageArray.push(image);
});
});

Il mio problema è che devo eseguire altre istruzioni che richiedono le immagini prese col $.get .
Tuttavia, siccome .each è sequenziale mentre le richieste sono asincrone, anche utilizzando $.when non riuscirei comunque a capire quando tutte le richieste ajax sono state completate ( proprio a causa della sequenzialità del .each ).

Qualcuno mi sa indicare come fare per eseguire un'istruzione al termine di tutte le richieste ajax ( ovvero dopo l'esecuzione dell'ultimo .each )?

wingman87
07-07-2013, 11:53
C'è un evento apposito, ammetto che non lo conoscevo prima... ecco qua:
http://api.jquery.com/ajaxStop/

kwb
07-07-2013, 12:24
Leggendario! Funziona :eek:
Ho poi un altro dubbio che non riesco a chiarire ( nonostante ci sia una tonnellata di documentazione su internet ).

Se voglio mettere in cache le immagini ( ovvero fare un prefetching ), se faccio così è sufficiente?

$.get(link,function(data){
var image = new Image();
image.src=$(data).find('#mainImg')[0].src;
imageArray.push(image);
});

imageArray è un array generico.

wingman87
07-07-2013, 16:11
Dipende da quello che vuoi fare... In quel modo avvii la richiesta delle immagini, se invece vuoi gestire l'avvenuto caricamento devi anche gestire l'evento load di Image.