jQuery Ajax: wie zu warten, bis *async* Anfragen Erfolg abgeschlossen, bevor Sie fortfahren?
Ich habe ein problem damit, ajax schnell und funktionsfähig. Hier ist die pseudo - /Prototyp-code:
function blah1(arg1){//arg1 is an array, roughly 10 elements
var arr[];
$.each(arg1, function(i){
//blah code
$.ajax({
//blah options
async: true,
success: function(data){
arr[i] = data.someInt;
}//end success
});//end ajax
}//end each
return arr;
}//end function
Grundsätzlich, ich sende eine ajax und müssen die zurückgegebenen Daten für die weitere Verarbeitung.
Wenn ich async auf true, wird die Funktion sofort wieder leer 'arr' array, so wird das ganze Skript fehlschlägt.
Aber wenn ich async auf false gesetzt, dann funktioniert es, aber dauert sehr lange.
Habe ich diesen $.ajaxQueue(); Sache, aber ehrlich gesagt, ich verstehe es nicht, und ich weiß nicht, ob es funktionieren wird.
Die Frage ist also, Erstens, gibt es eine Möglichkeit, ich kann asynchron senden der ajax-Anfragen zur gleichen Zeit und lassen Sie die Funktion warten und return arr [], nachdem alle ajax fertig sind? Wenn nicht, wird die ajaxQueue in meinem Fall? (grobes Beispiel bitte?)
- Kannst du nicht senden Sie alle in einem einzigen AJAX-request und analysieren Sie die Ergebnisse für alle 10ish Antworten?
- Das ist möglich, aber das heißt ich werde zu tun haben, die Bearbeitung auf der server-Seite, und das ist eine ganze Durcheinander für mich, Tauchen Sie ein in. Ich würde es vorziehen, es zu tun auf jQuery.
- 1 Antrag besser ist dann 10+ Anfragen. Sie wird am Ende schlagen die Browser request limit.
- es ist ein browser-request limit?
- Es ist browser-spezifisch last ich habe mit IE8 Begrenzung auf 6 paralell-verbindungen beim FF-Begrenzung 8. Die Begrenzung auf älteren Browsern ist 2.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Mithilfe von jQuery 1.5 aufgeschoben ist, würde ich die Entscheidung für dieses :
War das problem Sie versuchen, um return array in deiner Funktion vor dem asynchronen ajax-calls zu beenden. Dies ist nicht wirklich möglich, so dass Sie brauchen, um passieren eine callback-Funktion an, bla bla bla.
Was Ihr hier macht, ist die mapping-array von Objekten, um jqXHR Objekte (die latente Objekte). Dann übergeben Sie dieses array latenter Objekte zu
$.when
.$.when
nimmt ein array und dann können Sie führen Sie das.then
Funktion, wenn das gesamte array geladen aus dem ajax-Aufrufe. Sie haben dann eineresultsArr
übergeben als argument für Ihre.then
Funktion.Gibt es keine Möglichkeit,
$.ajax
undreturn
in der gleichen Funktion, wenn Sie manipulieren den Rückgabewert in Ihrer ajax-Erfolg nennen.Können Sie den Ajax-Aufruf synchron -, die Sie scheinen zu wissen über, ich persönlich würde die re-Faktor mein code, so dass der Erfolg der Methode von der ajax-Aufruf, löst dann einen Ruf aus, um einer anderen Funktion.