Ulteriore debug, stavolta sullo
script completo (una volta ricavati gli URL la struttura è la stessa, c'è giusto in mezzo la creazione del nuovo tab).
Ho trasferito il codice apparentemente funzionante di sopra nello script completo, e ho fatto le prove su
questa pagina.
Si presentano due principali problemi:
- Dei 5 link, riesco ad ottenerne un numero variabile tra nessuno e tutti.
Quando non riesco ad ottenerli il motivo è un xhr.readyState =3, ossia la risorsa è disponibile ma ancora in caricamento (eh?!?)
Da notare come quelli che non riescono sono sempre i primi. Per esempio se riesco ad ottenerne 2 su 5, allora sono le prime tre request ad fallire. * - i link che ottengo sono tutti uguali, e sono sempre riferiti all'immagine ricavata con l'ultima request (stesso problema di cui parlavo in precedenza)
Penso che le due cose possano essere legate in qualche modo. É come se venisse processata un'unica richiesta che inizialmente è in caricamento (xhr.readyState = 3) e una volta caricata passa a xhr.readyState = 4 e quindi viene richiamata la xhrCallback.
Alcuni screenshot di debug, fatti con l'alert:
2su5,
3su5 e il rarissimo
5su5.
Qualche idea?
EDIT:
* Osservando meglio, l'ordine non segue quello di partenza delle request ma quello di ritorno del dato. Essendo richieste asincrone le risposte possono arrivare in ordine diverso da quello di partenza. Negli screenshot io misuro la lunghezza dell'array che contiene i link alle immagini, ma aggiungendo un ulteriore parametro di debug, ossia un indice che segnala l'ordine di partenza delle request, è evidente questa differenza.
RI-EDITHo notato una cosa: per quanto gli URL delle immagini siano uguali, provando a passare anche l'URL della pagina da cui l'immagine viene ricavata, questi risultano differenti.
Quindi qualcosa avviene tra la xhr.open (in cui specifico l'URL della pagina) e la risposta (in cui l'oggetto DOC restituito è identico per tutte le chiamate, dato che ricavo sempre lo stesso URL dell'immagine).
Sempre più convinto sia un problema di chiusura, ma non riesco a capire come avviene.