Вот этот скрипт осуществляет множественную загрузку, обращение к серверу POST осуществляется асинхронно, скажите пожалуйста как отрегулировать скрипт так чтобы по complete каждого имиджа создавалась пауза пока я не отвечу на вопрос продолжить ли загрузку, а потом только следующий POST улетал на сервер - дело в том что на сервере по каждому имеджу происходит запись в сессию.
Скрипт немного сокращен отсутствуют инит моменты но сама суть понятна должна быть
(function($) {
self._damnUploaderUploadItem = function(url, item) {
if (!checkIsFile(item.file)) {
return false;
}
var xhr = new XMLHttpRequest();
var progress = 0;
var uploaded = false;
if (xhr.upload) {
xhr.upload.addEventListener("progress", function(e) {
if (e.lengthComputable) {
progress = (e.loaded * 100) / e.total;
if ($.isFunction(item.onProgress)) {
item.onProgress.call(item, Math.round(progress));
}
}
}, false);
xhr.upload.addEventListener("load", function(e){
progress = 100;
uploaded = true;
}, false);
} else {
uploaded = true;
}
xhr.onreadystatechange = function () {
var callbackDefined = $.isFunction(item.onComplete);
if (this.readyState == 4) {
item.cancelled = item.cancelled || false;
if (this.status < 400) {
if (!uploaded) {
if (callbackDefined) {
item.onComplete.call(item, false, null, 0);
}
} else {
if ($.isFunction(item.onProgress)) {
item.onProgress.call(item, 100);
}
if (callbackDefined) {
item.onComplete.call(item, true, this.responseText);
}
}
} else {
if (callbackDefined) {
item.onComplete.call(item, false, null, this.status);
}
}
}
};
var filename = item.replaceName || item.file.name;
xhr.open("POST", url);
if ($.support.fileSending) {
var cnt=count(queue);
var formData = new FormData();
formData.append((item.fieldName || 'file'), item.file);
xhr.send(formData);
} else if ($.support.fileReading && xhr.sendAsBinary) {
var boundary = "xxxxxxxxx";
var body = "--" + boundary + "\r\n";
filename = unescape(encodeURIComponent(filename));
body += "Content-Disposition: form-data; name='"+(item.fieldName || 'file')+"'; filename='" + filename + "'\r\n";
body += "Content-Type: application/octet-stream\r\n\r\n";
body += (item.file.getAsBinary ? item.file.getAsBinary() : item.file.readAsBinary()) + "\r\n";
body += "--" + boundary + "--";
xhr.sendAsBinary(body);
} else {
xhr.setRequestHeader('Upload-Filename', item.file.name);
xhr.setRequestHeader('Upload-Size', item.file.size);
xhr.setRequestHeader('Upload-Type', item.file.type);
xhr.send(item.file);
}
item.xhr = xhr;
}
var isFileField = ((self.get(0).tagName == 'INPUT') && (this.attr('type') == 'file'));
if (isFileField) {
var myName = self.eq(0).attr('name');
if (!$.support.fileSelecting) {
if (myName.charAt(myName.length-1) != ']') {
myName += '[]';
}
self.attr('name', myName);
self.attr('multiple', false);
var action = self.parents('form').attr('action');
self._damnUploaderFakeForm = $('<form/>').attr({
method: 'post',
enctype: 'multipart/form-data',
action: action
}).hide().appendTo('body');
} else {
self.attr('multiple', true);
}
self._damnUploaderChangeCallback = function() {
self._damnUploaderFilesAddMap($.support.fileSelecting ? this.files : this, set.onSelect);
};
self.on({
change: self._damnUploaderChangeCallback
});
}
if (set.dropping) {
self.on({
drop: function(e) {
self._damnUploaderFilesAddMap(e.originalEvent.dataTransfer.files, set.onSelect);
return false;
}
});
if (set.dropBox) {
$(set.dropBox).on({
drop: function(e) {
self._damnUploaderFilesAddMap(e.originalEvent.dataTransfer.files, set.onSelect);
return false;
}
});
}
}
return self;
}
switch(params) {
case 'addItem':
if (!data) {
return false;
}
var queueId = uniq(5);
if (data.file.fake) {
var input = $(data.file.inputElement);
var cloned = $(input).clone();
$(input).before(cloned);
$(input).attr('id', queueId);
$(input).appendTo(self._damnUploaderFakeForm);
cloned.on({
change: self._damnUploaderChangeCallback
});
self._damnUploaderItemsCount++;
return queueId;
}
if (!checkIsFile(data.file)) {
return false;
}
queue[queueId] = data;
self._damnUploaderItemsCount++;
return queueId;
break;
case 'startUpload':
if (!set.url) {
return self;
}
if (!$.support.fileSelecting) {
self._damnUploaderFakeForm.submit();
return self;
}
var i =0;
var complete_one = false;
$.each(queue, function(queueId, item) {
var compl = item.onComplete;
item.fieldName = item.fieldName || set.fieldName;
item.onComplete = function (successful, data, error) {
if (!this.cancelled) {
delete queue[queueId];
self._damnUploaderItemsCount--;
}
if ($.isFunction(compl)) {
compl.call(this, successful, data, error);
}
if ((self._damnUploaderItemsCount == 0) && ($.isFunction(set.onAllComplete))) {
set.onAllComplete.call(self, data);
}
};
self._damnUploaderUploadItem(set.url, item);
});
break;
}