Здравствуйте. Вот у меня такая задача, пишу jQuery плагин, внутри которого есть загрузка файлов, такая последовательность действий, извлекаются все поля type=file, далее перебирается все, если есть атрибут multiple у текущего - то все что в нем отправляется по очереди и так до конца перебора всех полей. Мне необходимо заставить скрипт ждать пока закончится отправку текущего файла и перейти к след итерации перебора (each). Вот то что я написал:
var sel = $('.file');
if(sel.length>0){
console.log('Saved files, total fields: '+sel.length);
function sendFile(fd){
$.element.stateUpload = true;
$.ajax({
type: 'POST',
url: HOST+'/uploadFile',
data: fd,
processData: false,
contentType: false,
success: function(data) {
$.element.stateUpload = false;
console.log(data);
},
error: function(data) {
$.element.stateUpload = false;
console.log(data);
}
});
}
$.each(sel,function(){ //отправка всех файлов по очереди даже если multiple - то по одному
var fd = new FormData();
fd.append('elementID', data.elementID);
fd.append('type',$(this).data('file'));
var file = $(this)[0].files[0];
if($(this).hasAttr('multiple')){
var input = document.querySelector('[data-file="'+$(this).data('file')+'"]').files;
for (var i = 0; i < input.length; i++){
fd.append('file',input[i]);
sendFile(fd);
}
}else{
fd.append('file', file);
sendFile(fd);
}
});
Тут еще неплохо было бы выдать alert(), после окончания загрузки всех файлов из очереди. Я лепил интервалы, ничего толкового не вышло, помогите разобраться!