Jquery-ajax-Aufruf innerhalb eines each-Schleife
Ich habe ein problem bei der Verwendung der jquery .each() und .ajax () - Funktionen zusammen. Ich bin mit .each () - Schleife über 5 Elemente und trete den .ajax () - Aufruf für jeden. Mein problem ist, dass ich nur wollen, dass die Schleife fortsetzen, wenn eine Antwort empfangen wurde, wird von jedem ajax-request. Derzeit sind alle 5 Elemente sind geloopt, 5 ajax-Anfragen, dann 5 Antworten zurückgegeben.
Ihr ein einfaches Beispiel:
$(".element").each(function() {
var id= $(this).find(('txtId').val();
$.ajax({
type: "POST",
url: "/Handlers/Handler.ashx",
data: "ID=" + id,
success: function(xml){
//I would like the each() loop to pause until this is hit,
//and some additional logic can be performed.
}
});
});
Cheers.
InformationsquelleAutor DazzledKid | 2010-07-13
Du musst angemeldet sein, um einen Kommentar abzugeben.
Könnten Sie die
async
option für Sie dies, um jede Anfrage synchron (= halt die Skript-Ausführung, bis jeder Anforderung fertig ist):aber, wie die docs schon sagen, dies wird dringend abgeraten, denn es könnte einfrieren des Browsers, wenn eine Anforderung nicht reagiert oder das Timeout.
Wäre es besser, zu ändern die Architektur des Codes in einer Weise, die das arbeiten mit dem klassischen callback-Funktionen werden, wenn überhaupt möglich.
InformationsquelleAutor Pekka 웃
Pekka hat die richtige Antwort. Editieren Sie einfach Ihr Skript, wie unten beschrieben.
Ich bin nicht sicher, was Sie erwartet hatten, auftreten. Wenn Sie möchten, dass das script anhalten und auf die Reaktion warten, dann wird es genau das tun, anhalten und warten. Vielleicht solltest du erklären, was genau es ist, dass Sie suchen, um zu erreichen, da es möglicherweise einen besseren Weg. Es gibt wahrscheinlich einen besseren Weg zur Erreichung der end-Ergebnisse, die Sie auf Wunsch mit einem anderen Algorithmus.
InformationsquelleAutor YonahW
ich bin glücklich zu sagen, es gibt einen Weg... aber es ist ein bisschen böse.
Wenn Sie sicher sind, dass Sie den Wunsch hat, etwas zurück zu geben, dann können Sie entfernen die "tryIteration" Teil.
InformationsquelleAutor Radu
Können Sie die jquery-latente und Versprechen Funktion prüfen Sie den asynchronen Aufruf wird der Erfolg oder nicht. http://joseoncode.com/2011/09/26/a-walkthrough-jquery-deferred-and-promise/
InformationsquelleAutor Aroor