非同步無重新整理上傳檔案而且上傳檔案能夠帶上參數

來源:互聯網
上載者:User

標籤:png   image   _id   dom   adf   timeout   input   src   roc   

關於非同步上傳檔案而且帶上參數,網上有非常多關於這種外掛程式。而我最喜歡用的外掛程式是ajaxfileupload.js。該外掛程式的代碼例如以下:

 

/*  131108-xxj-ajaxFileUpload.js 無重新整理上傳圖片 jquery 外掛程式。支援 ie6-ie10   依賴:jquery-1.6.1.min.js  主方法:ajaxFileUpload 接受 json 對象參數  參數說明:  fileElementId:必選,上傳檔案域ID  url:必選,發送請求的URL字串  fileFilter:可選,限定上傳檔案的格式(.jpg,.bmp,.gif,.png)  fileSize:可選,0 為無限制(IE瀏覽器不相容)  data:可選,將和檔案域一同post的參數(json對象)  其他:$.ajax 的參數均為可選參數  註:如遇到‘無法訪問’的指令碼錯誤提示則須要在響應流中加一段腳塊一同輸出:<script ...>document.domain = 'xxx.com';</script>*/jQuery.extend({  //建立 iframe 元素,接受提交及響應  createUploadIframe: function(id, uri) {    //create frame    var frameId = 'jUploadFrame' + id;    if (window.ActiveXObject) {      //fix ie9 and ie 10-------------      if (jQuery.browser.version == "9.0" || jQuery.browser.version == "10.0") {        var io = document.createElement('iframe');        io.id = frameId;        io.name = frameId;      } else if (jQuery.browser.version == "6.0" || jQuery.browser.version == "7.0" || jQuery.browser.version == "8.0") {        var io = document.createElement('<iframe id="' + frameId + '" name="' + frameId + '" />');        if (typeof uri == 'boolean') {          io.src = 'javascript:false';        } else if (typeof uri == 'string') {          io.src = uri;        }      }    } else {      var io = document.createElement('iframe');      io.id = frameId;      io.name = frameId;    }    io.style.position = 'absolute';    io.style.top = '-1000px';    io.style.left = '-1000px';    document.body.appendChild(io);    return io;  },  //建立 from 元素。用於提交的表單  createUploadForm: function(id, fileElementId, postData) {    //create form<span style="white-space:pre"></span>    var formId = 'jUploadForm' + id;    var fileId = 'jUploadFile' + id;    var form = $('<form  action="" method="POST" name="' + formId + '" id="' + formId + '" enctype="multipart/form-data"></form>');    var oldElement = $('#' + fileElementId);    var newElement = $(oldElement).clone();    $(oldElement).attr('id', fileId);    $(oldElement).before(newElement);    $(oldElement).appendTo(form);    //加入自己定義參數    if (postData) {      //遞迴遍曆JSON全部索引值      function recurJson(json) {        for (var i in json) {          //alert(i+"="+json[i])          $("<input name='" + i + "' id='" + i + "' value='" + json[i] + "' />").appendTo(form);          if (typeof json[i] == "object") {            recurJson(json[i]);          }        }      }      recurJson(postData);    }    //set attributes    $(form).css('position', 'absolute');    $(form).css('top', '-1200px');    $(form).css('left', '-1200px');    $(form).appendTo('body');    return form;  },  //上傳檔案  //s 參數:json對象  ajaxFileUpload: function(s) {    s = jQuery.extend({fileFilter:"",fileSize:0}, jQuery.ajaxSettings, s);    //檔案篩選    var fielName = $('#' + s.fileElementId).val();    var extention = fielName.substring(fielName.lastIndexOf(".") + 1).toLowerCase();    if (s.fileFilter && s.fileFilter.indexOf(extention) < 0) {      alert("僅支援 (" + s.fileFilter + ") 為尾碼名的檔案!");      return;    }    //檔案限制大小    if (s.fileSize > 0) {      var fs = 0;      try {        if (window.ActiveXObject) {          //IE瀏覽器          var image = new Image();          image.dynsrc = fielName;          fs = image.fileSize;        } else {          fs = $('#' + s.fileElementId)[0].files[0].size;        }      } catch(e) {      }      if (fs > s.fileSize) {        alert("當前檔案大小 (" + fs + ") 超過同意的限制值 (" + s.fileSize +")!

");        return;      }    }    var id = new Date().getTime();    //建立 form 表單元素    var form = jQuery.createUploadForm(id, s.fileElementId, s.data);    //建立 iframe 貞元素    var io = jQuery.createUploadIframe(id, s.secureuri);    var frameId = 'jUploadFrame' + id;    var formId = 'jUploadForm' + id;    //監測是否有新的請求    if (s.global && !jQuery.active++) {      jQuery.event.trigger("ajaxStart"); //觸發 AJAX 請求開始時執行函數。

Ajax 事件。

    }    var requestDone = false;    //建立請求對象    var xml = {};    if (s.global)      jQuery.event.trigger("ajaxSend", [xml, s]); //觸發 AJAX 請求發送前事件    //上傳完畢的回呼函數    var uploadCallback = function(isTimeout) {      var io = document.getElementById(frameId);      try {        //存在跨域指令碼訪問問題。如遇到‘無法訪問’提示則須要在響應流中加一段腳塊:<script ...>document.domain = 'xxx.com';</script>        if (io.contentWindow) { //相容各個瀏覽器。可取得子表單的 window 對象          xml.responseText = io.contentWindow.document.body ? io.contentWindow.document.body.innerHTML : null;          xml.responseXML = io.contentWindow.document.XMLDocument ?

io.contentWindow.document.XMLDocument : io.contentWindow.document;        } else if (io.contentDocument) { //contentDocument Firefox 支援,> ie8 的ie支援。

可取得子表單的 document 對象。          xml.responseText = io.contentDocument.document.body ? io.contentDocument.document.body.innerHTML : null;          xml.responseXML = io.contentDocument.document.XMLDocument ? io.contentDocument.document.XMLDocument : io.contentDocument.document;        }      } catch(e) {        jQuery.handleErrorExt(s, xml, null, e);      }      if (xml || isTimeout == "timeout") {        requestDone = true;        var status;        try {          status = isTimeout != "timeout" ?

"success" : "error";          // Make sure that the request was successful or notmodified          if (status != "error") {            //處理資料(執行XML通過httpData無論回調)            var data = jQuery.uploadHttpData(xml, s.dataType);            // 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]);          } else            jQuery.handleErrorExt(s, xml, status);        } catch(e) {          status = "error";          jQuery.handleErrorExt(s, xml, status, e);        }        // 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();        setTimeout(function() {          try {            $(io).remove();            $(form).remove();          } catch(e) {            jQuery.handleErrorExt(s, xml, null, e);          }        }, 100);        xml = null;      }    };    //逾時檢查。s.timeout 毫秒後調用 uploadCallback 回呼函數提示請求逾時    if (s.timeout > 0) {      setTimeout(function() {        // Check to see if the request is still happening        if (!requestDone) uploadCallback("timeout");      }, s.timeout);    }    try {      //設定動態 form 表單的提交參數      // var io = $('#' + frameId);      var form = $('#' + formId);      $(form).attr('action', s.url);      $(form).attr('method', 'POST');      $(form).attr('target', frameId);      if (form.encoding) {        form.encoding = 'multipart/form-data';      } else {        form.enctype = 'multipart/form-data';      }      $(form).submit();    } catch(e) {      jQuery.handleErrorExt(s, xml, null, e);    }    //向動態表單的頁面載入事件中注冊回呼函數    if (window.attachEvent) {      document.getElementById(frameId).attachEvent('onload', uploadCallback);    } else {      document.getElementById(frameId).addEventListener('load', uploadCallback, false);    }    return {      abort: function() {      }    };  },  //上傳檔案  uploadHttpData: function(r, type) {    //alert("type=" + type + ";uploadHttpData" + JSON.stringify(r))    var data = !type;    data = type == "xml" || data ?

r.responseXML : r.responseText;    // If the type is "script", eval it in global context    if (type == "script")      jQuery.globalEval(data);    // Get the JavaScript object, if JSON is used.    if (type == "json")      eval("data = " + data);    // evaluate scripts within html    if (type == "html")      jQuery("<div>").html(data).evalScripts();    //alert($('param', data).each(function(){alert($(this).attr('value'));}));    return data;  },  handleErrorExt: function(s, xhr, status, e) {    // If a local callback was specified, fire it    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]);    }  }});

以上外掛程式須要jquery支援

還須要下面代碼

   $.ajaxFileUpload ({  url :url,  secureuri:false,  fileElementId:img,  dataType:'text',  data:{imge:im}, success : function (data, status){ if(data!=""){   imsrc.attr('src',data);   hide.val(data); } } });

    url 是服務端的地址

     fileElementId 是檔案域的id 為了上傳成功 檔案域的name 與id要一致

    dateType 是上傳檔案的資訊發送到服務端的格式,text是文本 

     data 是傳送檔案能夠帶上參數,是可選的。

非同步無重新整理上傳檔案而且上傳檔案能夠帶上參數

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.