2010-01-04 17 views
6

Ho una funzione JavaScript che effettua due richieste Ajax consecutive utilizzando jQuery. Voglio assicurarmi che la prima richiesta sia stata caricata prima che venga chiamata la seconda funzione. C'è un modo per farlo?Assicurarsi che la prima funzione Ajax termini prima del secondo

+1

È la seconda chiamata * Ajax * che deve attendere fino al ritorno del primo, o il secondo * callback * che deve attendere? (es. devi aspettare prima di sparare la seconda richiesta di ajax, o entrambi possono essere sparati uno dopo l'altro, ma vuoi essere sicuro che se il secondo ritorna per primo, la sua callback è bloccata fino a che il primo non ritorna) – Graza

+0

La seconda funzione non dovrebbe essere attivata fino al completamento del primo. La 1a funzione crea un elemento modulo e il 2 prende quel valore del modulo e fa alcuni calcoli basati su di esso. – Brian

risposta

7

Specificare async: false nelle opzioni $.ajax oppure effettuare la seconda chiamata ajax nella chiamata complete della prima chiamata.

+0

Non sarebbe 'async: false'? –

+0

Effettivamente. Accidenti a quella logica negativa. –

+0

'async: false' funziona alla grande. L'ordine in cui chiamo le due funzioni varia, quindi è molto preferito il metodo di callback. – Brian

0

Nella richiamata per la prima funzione, effettuare la seconda chiamata.

0

Per risultati ottimali, è consigliabile richiamare la seconda funzione nel callback del primo.

Per esempio:

$.post("http://www.somewebsite.com/page.php", function(data) { 
    // whatever 
    function2(); 
}); 
0
$.post("script1.php", {data:"val"}, function(response) { 
    $.post("script2.php", {data:response}, function(results) { 
    // this second call will be initialized when the first finishes 
    }); 
}); 
0

Un esempio di implementazione:

function callback() {$('div#second_ajax_output').load('http://www.google.com');} 
$('div#first_ajax_output').load('http://www.yahoo.com',callback); 
-1

Edit: Misread questione; colpa mia. Se si desidera avere due richieste AJAX eseguite contemporaneamente ma eseguire una richiamata solo dopo che entrambe sono state completate, ecco come si fa!

Prova questa:

var completedCount = 0; 
var callback = function() 
{ 
    completedCount++; 
    if (completedCount == 2) 
    { 
     // Do something. 
    } 
}; 

$.post('url-1', {}, callback); 
$.post('url-2', {}, callback); 
0

utilizzando jQuery il modo più semplice è come questo:

$.ajax({ 
    type: "POST", 
    url: "some.php",  
    success: function(msg){ 
     $.ajax({ 
     type: "POST", 
     url: "some2.php", 

     success: function(msg){ 
      alert("End of second call"); 
     } 
     }); 
    } 
}); 
0

Il modo più semplice è quello di sparare la seconda richiesta quando i primi ritorni (nel callback completa).

Se avete bisogno di un approccio più sofisticato date un'occhiata al plug-in AjaxQueue. È possibile accodare le richieste in questo modo.

Problemi correlati