LPology / Simple-Ajax-Uploader

Javascript file upload plugin with progress bar support. Works in all major browsers, including IE7+, Chrome, Firefox, Safari, and Opera. No dependencies - use it with or without jQuery.
995 stars 267 forks source link

Немного доработал #86

Closed Azq2 closed 9 years ago

Azq2 commented 9 years ago

http://dumpz.org/1303753/

Index: SimpleAjaxUploader.js
===================================================================
--- SimpleAjaxUploader.js   (revision 121436)
+++ SimpleAjaxUploader.js   (working copy)
@@ -44,6 +44,10 @@
               typeof File !== 'undefined' &&
               typeof ( new XMLHttpRequest() ).upload !== 'undefined' );

+ss.isAjaxSupport = function () {
+   return XhrOk;
+};
+
 /**
 * Converts object to query string
 */
@@ -132,17 +136,19 @@

 ss.newXHR = function() {
     "use strict";
-
+   var xhr;
     if ( typeof XMLHttpRequest !== 'undefined' ) {
-        return new window.XMLHttpRequest();
+        xhr = new window.XMLHttpRequest();

     } else if ( window.ActiveXObject ) {
         try {
-            return new window.ActiveXObject( 'Microsoft.XMLHTTP' );
+            xhr = new window.ActiveXObject( 'Microsoft.XMLHTTP' );
         } catch ( err ) {
             return false;
         }
     }
+    xhr.withCredentials = true;
+    return xhr;
 };

 /**
@@ -462,6 +468,7 @@
         maxSize: false,
         name: '',
         data: {},
+       postData: {},
         autoSubmit: true,
         multipart: false,
         method: 'POST',
@@ -603,6 +610,15 @@
         this._opts.data = data;
     },

+   /**
+   * Replaces user post data
+   * Note that all previously set data is entirely removed and replaced
+   */
+   setPostData: function( data ) {
+       "use strict";
+       this._opts.postData = data;
+   },
+
     /**
     * Set or change uploader options
     * @param {Object} options
@@ -769,7 +785,6 @@
     */
     _createInput: function() {
         "use strict";
-
         var self = this,
             div = document.createElement( 'div' );

@@ -908,7 +923,10 @@
             if ( self._disabled ) {
                 return;
             }
-
+            
+            if (!self._opts.multiple)
+               self.clearQueue();
+            
             if ( !self._input ) {
                 self._createInput();
             }
@@ -1219,6 +1237,12 @@
                 }
             }

+            for (var prop in opts.postData) {
+               if (opts.postData.hasOwnProperty(prop)) {
+                   formData.append(prop, opts.postData[prop]);
+               }
+           }
+
             formData.append( opts.name, this._file );
             this.log( 'Commencing upload using multipart form' );
             xhr.send( formData );
@@ -1248,6 +1272,12 @@
             removeMessageListener,
             removeLoadListener;

+       for (var prop in opts.postData) {
+           if (opts.postData.hasOwnProperty(prop)) {
+               form.appendChild(this._getHidden(prop, opts.postData[prop]));
+           }
+       }
+
         if ( opts.sessionProgressUrl ) {
             form.appendChild( this._getHidden( opts.sessionProgressName, key ) );
         }
  1. Добавил возможность отправки кастомных POST параметров в обоих транспортах.
  2. Исправил баг, когда при multiple = false не очищалась очередь. Из-за этого отправлялся только первый файл и перевыбрать было нельзя.
  3. Добавил withCredentials к ajax. Иначе у меня куки не уходили на сервер.
LPology commented 9 years ago

These are good ideas. I'll probably be using some of this in the next release. Thanks for your input.