Come utilizzare $.when
in JQuery con promesse concatenate per garantire che le richieste ajax vengano completate nell'ordine corretto?
Ho un array chiamato costArray
che è composto da un numero di oggetti dinamici. Per ogni articolo di questo array, chiamerò una richiesta Ajax chiamata GetWorkOrder
che restituisce un WorkOrder
che è fondamentalmente un elemento di riga di tabella con la classe .workOrder
e lo aggiunge alla tabella con ID #tbodyWorkOrders
.
Dopo aver elaborato tutti gli elementi dell'array, utilizzare $.when
per farmi sapere quando posso calcolare lo SubTotal
di ogni WorkOrder
.
Il mio problema è che i miei WorkOrder
vengono inseriti in ordini casuali, poiché le richieste ajax sono in fase di elaborazione asincrona. Come posso garantire che le mie richieste di ajax vengano elaborate e aggiunte nell'ordine corretto?
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 è tratto da una chiamata AJAX in precedenza ed è un array di oggetti che sto inserendo nel righe della tabella:
var costArray = JSON.parse([{"Trade":"Plasterer","Notes":"Test","Subtotal":"3781.00"}]);
La linea:
$('.workOrder').last().find('input').val(value.Subtotal);
è uno dei tanti che prende i valori da GetWorkOrder e li inserisce negli input corretti, ma Ho omesso il codice extra per chiarezza
Prendere in considerazione l'inclusione di un intero che indica l'ordine nella chiusura della richiamata di successo. – bhspencer