2011-11-30 5 views
6

A volte sulla mia pagina eseguo molte chiamate Ajax contemporaneamente. L'idea è che ogni elemento venga aggiornato man mano che i suoi dati diventano disponibili (non voglio fare la coda alle chiamate). A volte, tuttavia, la pagina Web non aggiorna nessun elemento finché tutte le chiamate ajax non sono state completate.La pagina attende tutte le chiamate AJAX da completare prima dell'aggiornamento

Ad esempio, ho quattro immagini di seguito che sto aggiornando: ogni immagine ha il proprio callback ajax che aggiornerà la sua origine una volta che i dati saranno disponibili; il codice simile a questa:

for (var i = 0; i < numPictures; i++){ 
    Dajaxice.Images.load_picture(callback_function, {'pictureId': i}); 
} 

il callback mette l'immagine nel suo elemento dell'interfaccia utente, una volta il suo pronto:

imgSnippet = '<img src="' + data.img_source + '"/>' 
$("#" + data.container_id).html(imgSnippet); 

(i dati sono gli oggetti di questa funzione ricevuto dal server)

Sto usando (come puoi vedere nell'esempio) dajax (plugin per django) per la funzionalità AJAX. Sul lato server ho un Apache (2.2) che esegue django 1.3 tramite mod_wsgi.

Quando eseguito, anche se alcune chiamate ajax terminano prima (posso vederlo sul mio server), la pagina non aggiorna nessun elemento fino a quando non ritorna l'ultima chiamata.

Qualche suggerimento?

Grazie,

+1

Questo è un duplicato di http://stackoverflow.com/questions/7504264/ajax-simultaneous-loading-of-multiple-images, in cui le persone sembrano aver risposto alla tua domanda. Non è questo il caso? – dyoo

+1

Le chiamate ajax sono sincrone? In tal caso, potresti non ricevere gli aggiornamenti dello schermo finché non ritorni al controllo di javascript nel sistema. – jfriend00

+0

@dyoo: buon posto, ma in realtà non è quello. Lo vedo accadere su un server Apache multi-thread – Goro

risposta

1

Suggerisco di fare un array per contenere tutte le immagini e fare una nuova funzione che visualizza le immagini quando su base annua tutti ottenuto dal server e nella chiamata di nuovo aumento immagine foreach q contatore predefinito quando il contatore è uguale al numero di immagini visualizza le foto e azzera il contatore e puoi mettere il caricamento sul luogo in cui l'immagine dovrebbe essere fino a qll di esse wwlith you Scusa non ho scritto il tuo codice ma sono sul cellulare forse lo posterò più tardi per te se la mia risposta non è chiara

1

Potresti riuscire a risolvere questo avvolgendo il contenuto delle tue funzioni di callback con unChiamatacon un timeout 0 o 1 millisecondo. Ciò libera il sistema per aggiornare lo schermo.

Problemi correlati