2010-10-26 21 views
10

La prima volta che un utente visita il mio sito Web, sto tracciando molte informazioni da varie fonti utilizzando un paio di chiamate Ajax. Come ricarico la pagina una volta che le chiamate ajax sono state fatte?Come ricarico la pagina dopo che tutte le chiamate ajax sono state completate?

if(userVisit != 1) { 
    // First time visitor 
    populateData(); 
} 

function populateData() { 
    $.ajax({ 
      url: "server.php", 
      data: "action=prepare&myid=" + id, 
      dataType: "json", 
      success: function(json) { 
       if(json.error) { 
        return; 
       } 
       _id = response[json].id; 
       getInformation(_id); 
      } 
    }); 
} 

function getInformation(id) { 
    $.ajax({ 
      url: "REMOTESERVICE", 
      data: "action=get&id=" + id, 
      dataType: "json", 
      success: function(json) { 
       if(json.error) { 
        return; 
       } 

       $.ajax({ 
         url: "server.php", 
         data: "action=update&myid=" + id + '&data=' + json.data.toString(), 
         dataType: "json", 
         success: function(json) { 
           if(json.error) { 
            return; 
           } 
         } 
       }); 
      } 
    }); 
} 

Così che cosa fa il codice è, si ottiene una lista di identificatori predefiniti per un nuovo utente (populateData funzione) e li utilizza per ottenere ulteriori informazioni da un servizio di terze parti (getInformation funzione). Questa funzione getInformation interroga un server di terze parti e una volta che il server restituisce alcuni dati, invia tali dati al mio server tramite un'altra chiamata ajax. Ora quello di cui ho bisogno è un modo per capire quando tutte le chiamate ajax sono state completate in modo da poter ricaricare la pagina. Eventuali suggerimenti?

risposta

32

Nella tua getInformation() chiamata, è possibile chiamare location.reload() nel vostro success richiamata, in questo modo:

success: function(json) { 
    if(!json.error) location.reload(true); 
} 

aspettare fino a eventuali chiamate ulteriormente Ajax completo, è possibile utilizzare il ajaxStop event, in questo modo:

success: function(json) { 
    if(json.error) return; 
    //fire off other ajax calls 
    $(document).ajaxStop(function() { location.reload(true); }); 
} 
+0

Grazie. Ma cosa succede se alcune chiamate ajax al mio server all'interno del callback 'successe 'nella funzione' getInformation' sono ancora in sospeso? Questo non aggiornerebbe semplicemente la pagina senza considerare quello? O mi sta sfuggendo qualcosa? – Legend

+0

@Legend - Sì, se vuoi ritardare fino a quando non sono tutti fatti, basta fare '$ (document) .ajaxStop (function() {location.reload (true);});' e verrà eseguito quando tutti quelle richieste complete. –

+0

Ciò ha perfettamente senso, ma per qualche motivo, quando inserisco questa chiamata, la pagina continua ad aggiornare continuamente. – Legend

0

Si può solo reindirizzare alla stessa pagina nel file server.php in cui la funzione è definita con un colpo di testa ('Località html-pagina');

Problemi correlati