Търся онлайн с часове и знам, че вероятно трябва да направя нещо с отложените обекти, но не мога да го направя.
Първо, ето моят код:
$('#uploadButton').on('click', function () {
//some preparation stuff (deleted)
var panels = boxesContainer.find('.panel');
var ajaxes = [];
$.each(panels, function (index, panel) {
//more preparation + declaration of variables
function getIdAndPrepareData() {
$.when(
$.ajax({
type: 'POST',
url: 'url',
data: {
'title': name
}
}))
.done(function (result, textStatus, jqXHR) {
if (result.success) {
var id = result.id;
} else {
getIdAndPrepareData();
}
console.log('Created Id: ' + id);
$.each(panelForms, function (index, form) {
var filesInput = //again, prep and vars
$.each($(filesInput)[0].files, function (index, file) {
var formData = new FormData();
formData.append('file', file);
//more stuff
ajaxes.push({
'formData': formData,
'file': file
});
});
});
}).fail(function () {
getIdAndPrepareData();
});
}
getIdAndPrepareData();
});
$.ajax().promise().done(function () {
console.log('bla bla bla');
});
});
Така че, основно, преминавам през определени DIV (.panels) и създавам нов обект на база данни чрез ajax за тях. След това подготвям данни, които да бъдат изпратени до сървъра чрез ajax, след като всички цикли завършат. И трябва да изпратя тези данни след всички цикли с ajax, защото следващите извиквания на ajax (които планирам да направя след итерирането през .panels и подготовката на данни) ще създадат други обекти, които ще бъдат свързани със създадените обекти за .panel DIV (изпращам всички тези данни към масива на ajaxes и планирам да ги използвам в).
Използвам отложени обекти на jQuerys в цикъла на панелите, за да получа новосъздадения идентификатор на панела и да го задържа в масива на ajaxes. Но не знам как да изпълня какъвто и да е код след цикъла на панелите.
Опитах се да направя обещание (съвсем нов съм в тази техника) за всички ajax извиквания в края ($.ajax().promise().done), но id изглежда не работи. Понякога console.log в обещанието се задейства в края, понякога в началото.
Не съм експерт по jQuery и JS, така че бих искал да помоля за някои обяснения как да работя с асинхронни ajax извиквания в цикли и какво трябва да направя в тази ситуация? Искам да изпълня някакъв код в края, след като всички данни са подготвени.
Благодаря ти.