2010-01-04 3 views
6

J'ai une fonction JavaScript qui fait deux requêtes Ajax consécutives en utilisant jQuery. Je veux m'assurer que la première requête a été chargée avant l'appel de la deuxième fonction. Y a-t-il un moyen de le faire?Assurez-vous que la première fonction ajax se termine avant la seconde

+1

Est-ce le deuxième appel * Ajax * qui doit attendre jusqu'à ce que le premier soit retourné, ou le deuxième * callback * qui doit attendre? (c'est-à-dire que vous devez attendre avant de déclencher la deuxième requête ajax, ou vous pouvez être renvoyé l'un après l'autre, mais vous voulez vous assurer que si le second retourne en premier, son rappel est bloqué jusqu'à ce que le premier – Graza

+0

La 2e fonction ne doit pas être déclenchée tant que la première n'est pas terminée. La première fonction crée un élément de formulaire et la seconde prend cette valeur de formulaire et effectue certains calculs sur celle-ci. – Brian

Répondre

7

Spécifiez async: false dans les options $.ajax ou effectuez le deuxième appel ajax dans le rappel complete du premier appel.

+0

Ne serait-ce pas 'async: false'? –

+0

En effet, il le ferait. Darn cette logique négative. –

+0

'async: false' fonctionne très bien. L'ordre dans lequel j'appelle les deux fonctions varie, donc il est préférable à la méthode de rappel. – Brian

0

Dans votre rappel pour la première fonction, effectuez votre deuxième appel.

0

Pour de meilleurs résultats, vous devez probablement appeler la deuxième fonction dans le rappel du premier.

Par exemple:

$.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 exemple d'implémentation:

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

Edit: Misread la question; ma faute. Si jamais vous voulez que deux requêtes AJAX soient exécutées simultanément mais que vous n'effectuiez un rappel qu'une fois toutes les deux terminées, voici comment vous le faites!

Essayez ceci:

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

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

En utilisant jQuery la façon la plus simple est comme ceci:

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

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

La méthode simple consiste à tirer la deuxième demande lorsque les premiers retours (dans le rappel complet).

Si vous avez besoin d'une approche plus sophistiquée, jetez un oeil au plug-in AjaxQueue. Vous pouvez mettre en file d'attente des demandes de cette manière.

Questions connexes