Wie verwende ich $.when
in JQuery mit verketteten Versprechen, um sicherzustellen, dass meine Ajax-Anfragen in der richtigen Reihenfolge abgeschlossen werden?
Ich habe ein Array namens costArray
, die aus einer Reihe von dynamischen Objekten besteht. Für jedes Element in diesem Array werde ich eine Ajax-Anfrage mit dem Namen GetWorkOrder
aufrufen, die eine WorkOrder
zurückgibt, die im Grunde ein Tabellenzeilenelement mit der Klasse .workOrder
ist und es an die Tabelle mit der ID #tbodyWorkOrders
anfügt.
Sobald alle Elemente im Array verarbeitet sind, verwende ich $.when
, um mich wissen zu lassen, wenn ich die SubTotal
von jedem WorkOrder
berechnen kann.
Mein Problem ist, dass meine WorkOrder
s in zufälligen Reihenfolgen eingefügt werden, da die Ajax-Anfragen async verarbeitet werden. Wie kann ich sicherstellen, dass meine Ajax-Anfragen in der richtigen Reihenfolge bearbeitet und angehängt werden?
i = 0;
$.each(costArray, function (key, value) {
var d1 = $.get('/WorkOrders/GetWorkOrder', { 'i': i }, function (html) {
$('#tbodyWorkOrders').append(html);
$('.workOrder').last().find('input').val(value.Subtotal);
});
$.when(d1).done(function() {
SetSubtotal();
i++;
});
Edit:
costArray aus einem frühen Ajax-Aufruf genommen und ist ein Array von Elementen, die ich in die Tabellenzeilen am Einfügen:
var costArray = JSON.parse([{"Trade":"Plasterer","Notes":"Test","Subtotal":"3781.00"}]);
Die Linie:
$('.workOrder').last().find('input').val(value.Subtotal);
ist einer von vielen, die die Werte von GetWorkOrder nimmt und sie in die richtigen Eingaben setzt, aber Ich habe den zusätzlichen Code für Klarheit weggelassen
Sie können eine Ganzzahl angeben, die die Reihenfolge beim Schließen des Erfolgsrückrufs angibt. – bhspencer