Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 18.03.2017, 16:36
Профессор
Отправить личное сообщение для imedia Посмотреть профиль Найти все сообщения от imedia
 
Регистрация: 20.05.2014
Сообщений: 292

Как добавить задержку в асинхронный скрипт
Вот этот скрипт осуществляет множественную загрузку, обращение к серверу 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;

  
}

Последний раз редактировалось imedia, 18.03.2017 в 16:38.
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Обратный отсчет на js как добавить 0 при значении от 0 до 9 kovalenko3331 Общие вопросы Javascript 2 08.04.2016 08:59
как добавить еще один селектор foxfor jQuery 1 29.05.2015 12:32
Подскажите как изменить скрипт ibutterfly777 Общие вопросы Javascript 0 10.10.2014 12:02
Как передать 2 значения в скрипт? useruser jQuery 1 07.10.2014 11:32
А как зделать скрипт, чтобы например скрипт 1 заменялся скриптом 2? yura371 Общие вопросы Javascript 3 06.01.2009 22:40