2010-01-04 11 views
6

Ich habe eine JavaScript-Funktion, die zwei aufeinanderfolgende Ajax-Anfragen mit jQuery macht. Ich möchte sicherstellen, dass die erste Anfrage geladen wurde, bevor die zweite Funktion aufgerufen wird. Kann ich das irgendwie machen?Stellen Sie sicher, dass die erste AJAX-Funktion vor dem zweiten fertig ist

+1

Ist es der zweite * Ajax * -Aufruf, der warten muss, bis der erste zurückgegeben wurde, oder der zweite * Rückruf *, der warten muss? (dh müssen Sie warten, bevor Sie die zweite Ajax-Anfrage abfeuern, oder beide können nacheinander abgefeuert werden, aber Sie möchten sicherstellen, dass, wenn der zweite zuerst zurückkehrt, sein Rückruf blockiert wird, bis der erste zurückkommt) – Graza

+0

Die 2. Funktion sollte erst ausgelöst werden, wenn die erste abgeschlossen ist. Die 1. Funktion erstellt ein Formularelement und die 2. Funktion nimmt diesen Formularwert an und führt einige Berechnungen basierend darauf durch. – Brian

Antwort

7

Geben Sie entweder async: false in den Optionen $.ajax ein, oder führen Sie den zweiten Ajax-Anruf im complete Rückruf des ersten Anrufs aus.

+0

Wäre das nicht "async: false"? –

+0

In der Tat würde es. Verdammt diese negative Logik. –

+0

'async: false' funktioniert super. Die Reihenfolge, in der ich die beiden Funktionen anrufe, ist sehr unterschiedlich, daher ist es der Callback-Methode vorzuziehen. – Brian

0

In Ihrem Rückruf für die erste Funktion, machen Sie Ihren zweiten Anruf.

0

Für beste Ergebnisse sollten Sie wahrscheinlich die zweite Funktion im Rückruf des ersten aufrufen.

Beispiel:

$.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

Eine beispielhafte Implementierung:

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

Edit: die Frage falsch verstanden; mein Fehler. Wenn Sie zwei AJAX-Requests gleichzeitig ausführen lassen möchten, aber erst nach dem Abschluss eines Callbacks einen Callback ausführen möchten, dann machen Sie das so!

Versuchen Sie folgendes:

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

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

Mit jQuery die einfachste Art und Weise, wie das ist:

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

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

Der einfache Weg ist, um die zweite Anforderung, wenn die ersten Erträge (in der vollständigen Rückruf) abzufeuern.

Wenn Sie einen anspruchsvolleren Ansatz benötigen, werfen Sie einen Blick auf das AjaxQueue Plug-in. Sie können Anforderungen auf diese Weise einreihen.

Verwandte Themen