首先,您应该知道我嵌套了$.ajax
个调用。第一个打印table
,完成后,我在表中为$.ajax
each
做第二个<tr>
。两者都使用async: true
。
之所以这样做,是因为我想给最终用户一个视图(表),然后3 <td>
必须从其他URL加载数据。在解释之后:
$.ajax({
// ...
complete: function() {
$('table tbody tr.product').each(function(i) {
let line = $(this);
...
// set variable
const data = { ...
};
// data values are from prev varaibles
$.ajax({
type: 'POST',
url: URIPOS,
data: data,
async: true,
beforeSend: function() {
tdMostSales.html('<i class="fa fa-spinner fa-spin fa-1x"></i>');
tdSubscriptions.html('<i class="fa fa-spinner fa-spin fa-1x"></i>');
tdGeneral.html('<i class="fa fa-spinner fa-spin fa-1x"></i>');
},
success: function(res) {
const resp = JSON.parse(res);
const {
general,
prevision
} = resp;
const {
total,
notified
} = resp.subscription;
tdMostSales.attr('data-value', prevision)
tdMostSales.html(`${prevision}`);
tdSubscriptions.html(`${notified}/${total}`);
tdGeneral.html(`${general}`);
},
complete: function() {
tdMostSales.blur();
}
});
if (i + 1 === $('table tbody tr.product').length) {
console.log('finished')
var options = {
valueNames: [
'name',
'sku',
'brand',
'match',
'profit',
'profit-rating',
'sell-rating',
{
name: 'pvp',
attr: 'data-value'
},
{
name: 'demand-forecast',
attr: 'data-value'
}
],
listClass: 'product-list-body'
//pagination : true,
//page: 20
};
var orderedList = new List('generator', options);
return;
}
});
}
});
但是,如果console.log('finished')
还没有完成,它仍然返回$.ajax
,那么它将返回<tr>
,那么如何处理呢?可能在每次完成时都回调,但是在哪里或如何做?
我不认为这是重复的帖子...因为我不想提出不同的ajax
,然后再得到一个response
,我需要提出一个请求,一旦完成,进行下一个,则第二个必须迭代每个tr并为每个tr进行请求,但要异步,一旦完成(无需提出更多请求),return
就会在所有tr
被迭代之后做出响应由ajax
。