Jak używać $.when
w JQuery z przykutymi obietnicami, aby upewnić się, że moje żądania ajaxowe zostały wykonane we właściwej kolejności?
Mam tablicę o nazwie costArray
, która składa się z wielu dynamicznych obiektów. Dla każdego elementu w tej tablicy, zadzwonię do żądania Ajax o nazwie GetWorkOrder
, które zwraca WorkOrder
, który jest w zasadzie elementem wiersza tabeli z klasą .workOrder
i dołącza go do tabeli o identyfikatorze #tbodyWorkOrders
.
Po przetworzeniu wszystkich elementów w tablicy używam $.when
, aby dać mi znać, kiedy mogę obliczyć SubTotal
każdego z WorkOrder
.
Mój problem polega na tym, że moje WorkOrder
s są wstawiane do losowych zamówień, ponieważ żądania ajax są przetwarzane asynchronicznie. Jak mogę zapewnić, że moje żądania ajaxowe są przetwarzane i dołączane w poprawnej kolejności?
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 pochodzi z wcześniejszego wywołania ajax i jest tablicą elementów, które ja wkładając do wierszy tabeli:
var costArray = JSON.parse([{"Trade":"Plasterer","Notes":"Test","Subtotal":"3781.00"}]);
Linia:
$('.workOrder').last().find('input').val(value.Subtotal);
jest jednym z wielu, który pobiera wartości z GetWorkOrder i umieszcza je we właściwych wejściach, ale Zostawiłam się dodatkowy kod dla jasności
Należy uwzględnić liczbę całkowitą, która wskazuje kolejność zamknięcia odwołania powodzenia. – bhspencer