From 2c55463d35a014214647accd69b7331da5ffa987 Mon Sep 17 00:00:00 2001 From: liaozetao <1107136310@qq.com> Date: Tue, 14 Nov 2023 16:01:12 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E4=B8=8A=E4=BC=A0=E7=BB=84?= =?UTF-8?q?=E4=BB=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/utils/ajaxfileupload.js | 60 ++++++++++++++++++------------------- 1 file changed, 29 insertions(+), 31 deletions(-) diff --git a/src/utils/ajaxfileupload.js b/src/utils/ajaxfileupload.js index 4c87d0c..08ec5b3 100644 --- a/src/utils/ajaxfileupload.js +++ b/src/utils/ajaxfileupload.js @@ -4,7 +4,6 @@ jQuery.extend({ if (s.error) { s.error.call(s.context || s, xhr, status, e); } - // Fire the global callback if (s.global) { (s.context ? jQuery(s.context) : jQuery.event).trigger("ajaxError", [xhr, s, e]); @@ -13,17 +12,14 @@ jQuery.extend({ createUploadIframe: function (id, uri) { //create frame var frameId = 'jUploadFrame' + id; - if (window.ActiveXObject) { var io = document.createElement(''); if (typeof uri == 'boolean') { io.src = 'javascript:false'; - } - else if (typeof uri == 'string') { + } else if (typeof uri == 'string') { io.src = uri; } - } - else { + } else { io = document.createElement('iframe'); io.id = frameId; io.name = frameId; @@ -31,18 +27,21 @@ jQuery.extend({ io.style.position = 'absolute'; io.style.top = '-1000px'; io.style.left = '-1000px'; - document.body.appendChild(io); - - return io + return io; }, createUploadForm: function (id, fileElementId) { //create form var formId = 'jUploadForm' + id; var fileId = 'jUploadFile' + id; - var form = $('
'); + var form = $('#' + formId); + if (form && form.length > 0) { + form.remove(); + } + form = $(''); var oldElement = $('#' + fileElementId); - var newElement = $(oldElement).clone(); + var newElement = $(oldElement).clone(true).val(""); + //须要复制元素的全部事件处理。 $(oldElement).attr('id', fileId); $(oldElement).before(newElement); $(oldElement).appendTo(form); @@ -53,7 +52,6 @@ jQuery.extend({ $(form).appendTo('body'); return form; }, - ajaxFileUpload: function (s) { // TODO introduce global settings, allowing the client to modify them for all requests, not only timeout s = jQuery.extend({}, jQuery.ajaxSettings, s); @@ -68,7 +66,7 @@ jQuery.extend({ } var requestDone = false; // Create the request object - var xml = {} + var xml = {}; if (s.global) jQuery.event.trigger("ajaxSend", [xml, s]); // Wait for a response to come back @@ -98,7 +96,6 @@ jQuery.extend({ // If a local callback was specified, fire it and pass it the data if (s.success) s.success(data, status); - // Fire the global callback if (s.global) jQuery.event.trigger("ajaxSuccess", [xml, s]); @@ -112,30 +109,22 @@ jQuery.extend({ // The request was completed if (s.global) jQuery.event.trigger("ajaxComplete", [xml, s]); - // Handle the global AJAX counter if (s.global && ! --jQuery.active) jQuery.event.trigger("ajaxStop"); - // Process result if (s.complete) s.complete(xml, status); - - jQuery(io).unbind() - + jQuery(io).unbind(); setTimeout(function () { try { $(io).remove(); $(form).remove(); - } catch (e) { jQuery.handleError(s, xml, null, e); } - - }, 100) - - xml = null - + }, 100); + xml = null; } } // Timeout checker @@ -153,12 +142,23 @@ jQuery.extend({ $(form).attr('target', frameId); if (form.encoding) { form.encoding = 'multipart/form-data'; - } - else { + } else { form.enctype = 'multipart/form-data'; } - $(form).submit(); - + let submitType = s.submitType; + let $form = $(form); + if (!submitType || submitType == 'form') { + $form.submit(); + } else if (submitType == 'ajax') { + $form.ajaxSubmit({ + success: function (data, status) { + s.success(data, status); + }, + error: function (err) { + jQuery.handleError(s, xml, null, err); + } + }); + } } catch (e) { jQuery.handleError(s, xml, null, e); } @@ -169,9 +169,7 @@ jQuery.extend({ document.getElementById(frameId).addEventListener('load', uploadCallback, false); } return { abort: function () { } }; - }, - uploadHttpData: function (r, type) { var data = !type; data = type == "xml" || data ? r.responseXML : r.responseText;