Форумы портала PHP.SU » » Вопросы новичков » Как отрегулировать множественную загрузку АЯКС

Страниц (1): [1]
 

1. imedia - 18 Марта, 2017 - 15:40:19 - перейти к сообщению
Вот этот скрипт осуществляет множественную загрузку, обращение к серверу POST осуществляется асинхронно, скажите пожалуйста как отрегулировать скрипт так чтобы по complete каждого имиджа создавалась пауза пока я не отвечу на вопрос продолжить ли загрузку, а потом только следующий POST улетал на сервер - дело в том что на сервере по каждому имеджу происходит запись в сессию.
Скрипт немного сокращен отсутствуют инит моменты но сама суть понятна должна быть

CODE (javascript):
скопировать код в буфер обмена
  1.  
  2.  
  3. (function($) {
  4.  
  5.             self._damnUploaderUploadItem = function(url, item) {
  6.                 if (!checkIsFile(item.file)) {
  7.                     return false;
  8.                 }
  9.                 var xhr = new XMLHttpRequest();
  10.                 var progress = 0;
  11.                 var uploaded = false;
  12.  
  13.                 if (xhr.upload) {
  14.                     xhr.upload.addEventListener("progress", function(e) {
  15.                         if (e.lengthComputable) {
  16.                             progress = (e.loaded * 100) / e.total;
  17.                             if ($.isFunction(item.onProgress)) {
  18.                                 item.onProgress.call(item, Math.round(progress));
  19.                             }
  20.                         }
  21.                     }, false);
  22.  
  23.                     xhr.upload.addEventListener("load", function(e){
  24.                         progress = 100;
  25.                         uploaded = true;
  26.                     }, false);
  27.  
  28.                 } else {
  29.                     uploaded = true;
  30.                 }
  31.  
  32.                 xhr.onreadystatechange = function () {
  33.                     var callbackDefined = $.isFunction(item.onComplete);
  34.                     if (this.readyState == 4) {
  35.                         item.cancelled = item.cancelled || false;
  36.                         if (this.status < 400) {
  37.                             if (!uploaded) {
  38.                                 if (callbackDefined) {
  39.                                     item.onComplete.call(item, false, null, 0);
  40.                                 }
  41.                             } else {
  42.                                
  43.                                 if ($.isFunction(item.onProgress)) {
  44.                                     item.onProgress.call(item, 100);
  45.                                 }
  46.                                 if (callbackDefined) {
  47.                                     item.onComplete.call(item, true, this.responseText);
  48.                                 }
  49.                             }
  50.                         } else {
  51.                             if (callbackDefined) {
  52.                                 item.onComplete.call(item, false, null, this.status);
  53.                             }
  54.                         }
  55.                     }
  56.                 };
  57.  
  58.                 var filename = item.replaceName || item.file.name;
  59.                 xhr.open("POST", url);
  60.                 if ($.support.fileSending) {
  61.                  var cnt=count(queue);
  62.                      var formData = new FormData();
  63.                     formData.append((item.fieldName || 'file'), item.file);
  64.                      xhr.send(formData);
  65.                 } else if ($.support.fileReading && xhr.sendAsBinary) {
  66.                     var boundary = "xxxxxxxxx";
  67.                     var body = "--" + boundary + "\r\n";
  68.                     filename = unescape(encodeURIComponent(filename));
  69.                     body += "Content-Disposition: form-data; name='"+(item.fieldName || 'file')+"'; filename='" + filename + "'\r\n";
  70.                     body += "Content-Type: application/octet-stream\r\n\r\n";
  71.                     body += (item.file.getAsBinary ? item.file.getAsBinary() : item.file.readAsBinary()) + "\r\n";
  72.                     body += "--" + boundary + "--";
  73.                     xhr.sendAsBinary(body);
  74.                 } else {
  75.                     xhr.setRequestHeader('Upload-Filename', item.file.name);
  76.                     xhr.setRequestHeader('Upload-Size', item.file.size);
  77.                     xhr.setRequestHeader('Upload-Type', item.file.type);
  78.                     xhr.send(item.file);
  79.                 }
  80.                 item.xhr = xhr;
  81.             }
  82.             var isFileField = ((self.get(0).tagName == 'INPUT') && (this.attr('type') == 'file'));
  83.  
  84.             if (isFileField) {
  85.                 var myName = self.eq(0).attr('name');
  86.                 if (!$.support.fileSelecting) {
  87.                     if (myName.charAt(myName.length-1) != ']') {
  88.                         myName += '[]';
  89.                     }
  90.                     self.attr('name', myName);
  91.                     self.attr('multiple', false);
  92.                     var action = self.parents('form').attr('action');
  93.                     self._damnUploaderFakeForm = $('<form/>').attr({
  94.                         method: 'post',
  95.                         enctype: 'multipart/form-data',
  96.                         action: action
  97.                     }).hide().appendTo('body');
  98.                 } else {
  99.                     self.attr('multiple', true);
  100.                 }
  101.  
  102.                 self._damnUploaderChangeCallback = function() {
  103.                     self._damnUploaderFilesAddMap($.support.fileSelecting ? this.files : this, set.onSelect);
  104.                 };
  105.  
  106.                 self.on({
  107.                     change: self._damnUploaderChangeCallback
  108.                 });
  109.             }
  110.  
  111.             if (set.dropping) {
  112.                 self.on({
  113.                     drop: function(e) {
  114.                         self._damnUploaderFilesAddMap(e.originalEvent.dataTransfer.files, set.onSelect);
  115.                         return false;
  116.                     }
  117.                 });
  118.                 if (set.dropBox) {
  119.                     $(set.dropBox).on({
  120.                         drop: function(e) {
  121.                             self._damnUploaderFilesAddMap(e.originalEvent.dataTransfer.files, set.onSelect);
  122.                             return false;
  123.                         }
  124.                     });
  125.                 }
  126.             }
  127.             return self;
  128.         }
  129.         switch(params) {
  130.  
  131.             case 'addItem':
  132.                 if (!data) {
  133.                     return false;
  134.                 }
  135.                 var queueId = uniq(5);
  136.                 if (data.file.fake) {
  137.                     var input = $(data.file.inputElement);
  138.                     var cloned = $(input).clone();
  139.                     $(input).before(cloned);
  140.                     $(input).attr('id', queueId);
  141.                     $(input).appendTo(self._damnUploaderFakeForm);
  142.                     cloned.on({
  143.                         change: self._damnUploaderChangeCallback
  144.                     });
  145.                     self._damnUploaderItemsCount++;
  146.                     return queueId;
  147.                 }
  148.                 if (!checkIsFile(data.file)) {
  149.                     return false;
  150.                 }
  151.                 queue[queueId] = data;
  152.                 self._damnUploaderItemsCount++;
  153.                 return queueId;
  154.                 break;
  155.  
  156.  
  157.             case 'startUpload':
  158.                 if (!set.url) {
  159.                     return self;
  160.                 }
  161.                 if (!$.support.fileSelecting) {
  162.                     self._damnUploaderFakeForm.submit();
  163.                     return self;
  164.                 }
  165.                 var i =0;
  166.                 var complete_one = false;
  167.                 $.each(queue, function(queueId, item) {
  168.  
  169.                    var compl = item.onComplete;
  170.  
  171.                         item.fieldName = item.fieldName || set.fieldName;
  172.                         item.onComplete = function (successful, data, error) {
  173.  
  174.  
  175.                             if (!this.cancelled) {
  176.                                 delete queue[queueId];
  177.                                 self._damnUploaderItemsCount--;
  178.                             }
  179.                             if ($.isFunction(compl)) {
  180.                                 compl.call(this, successful, data, error);
  181.                             }
  182.                             if ((self._damnUploaderItemsCount == 0) && ($.isFunction(set.onAllComplete))) {
  183.                                 set.onAllComplete.call(self, data);
  184.                             }
  185.   };
  186. self._damnUploaderUploadItem(set.url, item);
  187. });
  188.  break;
  189.  
  190. }
  191.  

 

Powered by ExBB FM 1.0 RC1