jquery实现异步文件上传ajaxfileupload.js


Posted in jQuery onOctober 23, 2020

本文实例为大家分享了jquery实现异步文件上传的具体代码,供大家参考,具体内容如下

ajaxfileupload.js 异步上传文件:

直接引用。

调用方法:

$.ajaxFileUpload({ 
 url:'',//后台接口地址 
 type: "post", 
 secureuri: false, //一般设置为false 
 fileElementId: 'ofx', // 上传文件的id、name属性名 
 dataType: 'json', 
 success: function(data, status){ 
  
 }, 
 error: function(data, status, e){ 
 } 
 });

下面是ajaxfileupload.js,可直接复制并引用。

jQuery.extend({
 createUploadIframe: function(id, uri)
 {
  
 //create frame
 var frameId = 'jUploadFrame' + id;
 var iframeHtml = '<iframe id="' + frameId + '" name="' + frameId + '" style="position:absolute; top:-9999px; left:-9999px"';
 if(window.ActiveXObject)
 {
 if(typeof uri== 'boolean'){
 iframeHtml += ' src="' + 'javascript:false' + '"';

 }
 else if(typeof uri== 'string'){
 iframeHtml += ' src="' + uri + '"';

 } 
 }
 iframeHtml += ' />';
 jQuery(iframeHtml).appendTo(document.body);

 return jQuery('#' + frameId).get(0); 
 },
 createUploadForm: function(id,fileElementId,data,fileElement)
 {
 //create form 
 var formId = 'jUploadForm' + id;
 var fileId = 'jUploadFile' + id;
 var form = jQuery('<form action="" method="POST" name="' + formId + '" id="' + formId + '" enctype="multipart/form-data"></form>'); 
 if(data)
 {
 for(var i in data)
 {
 jQuery('<input type="hidden" name="' + i + '" value="' + data[i] + '" />').appendTo(form);
 } 
 }

 
 if(typeof(fileElementId) == 'string'){
 fileElementId = [fileElementId];
 }
 for(var i in fileElementId){
 var oldElement = jQuery('#' + fileElementId[i]);
 var newElement = jQuery(oldElement).clone();
 jQuery(oldElement).attr('id', fileId);
 jQuery(oldElement).before(newElement);
 jQuery(oldElement).appendTo(form);
 }
 
 
 
 //set attributes
 jQuery(form).css('position', 'absolute');
 jQuery(form).css('top', '-1200px');
 jQuery(form).css('left', '-1200px');
 jQuery(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);
  var id = new Date().getTime()  
 var form = jQuery.createUploadForm(id, s.fileElementId, (typeof(s.data)=='undefined'?false:s.data),s.fileElement);
 var io = jQuery.createUploadIframe(id, s.secureuri);
 var frameId = 'jUploadFrame' + id;
 var formId = 'jUploadForm' + id; 
  // Watch for a new set of requests
  if ( s.global && ! jQuery.active++ )
 {
 jQuery.event.trigger( "ajaxStart" );
 }   
  var requestDone = false;
  // Create the request object
  var xml = {} 
  if ( s.global )
   jQuery.event.trigger("ajaxSend", [xml, s]);
  // Wait for a response to come back
  var uploadCallback = function(isTimeout)
 { 
 var io = document.getElementById(frameId);
   try 
 { 
 if(io.contentWindow)
 {
  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)
 {
  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.handleError(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" )
  {
      // process the data (runs the xml through httpData regardless of callback)
      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.handleError(s, xml, status);
    } catch(e) 
 {
     status = "error";
     jQuery.handleError(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 
   {
   jQuery(io).remove();
   jQuery(form).remove(); 
   
   } catch(e) 
   {
   jQuery.handleError(s, xml, null, e);
   }   

   }, 100)

    xml = null

   }
  }
  // Timeout checker
  if ( s.timeout > 0 ) 
 {
   setTimeout(function(){
    // Check to see if the request is still happening
    if( !requestDone ) uploadCallback( "timeout" );
   }, s.timeout);
  }
  try 
 {

 var form = jQuery('#' + formId);
 jQuery(form).attr('action', s.url);
 jQuery(form).attr('method', 'POST');
 jQuery(form).attr('target', frameId);
   if(form.encoding)
 {
 jQuery(form).attr('encoding', 'multipart/form-data');   
   }
   else
 { 
 jQuery(form).attr('enctype', 'multipart/form-data'); 
   } 
   jQuery(form).submit();

  } catch(e) 
 { 
   jQuery.handleError(s, xml, null, e);
  }
 
 jQuery('#' + frameId).load(uploadCallback);
  return {abort: function(){
 try
 {
 jQuery('#' + frameId).remove();
 jQuery(form).remove();
 }
 catch(e){}
 }};
 },

 uploadHttpData: function( r, type ) {
  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" ){
 以下为新增代码///
   data = r.responseText;
   var start = data.indexOf(">");
   if(start != -1) {
  var end = data.indexOf("<", start + 1);
  if(end != -1) {
  data = data.substring(start + 1, end);
  }
 }
 }
   ///以上为新增代码///
   eval( "data = " + data );
  // evaluate scripts within html
  if ( type == "html" )
   jQuery("<div>").html(data).evalScripts();

  return data;
 },
 
 handleError: function( s, xml, status, e ) {
 // If a local callback was specified, fire it
 if ( s.error )
 s.error( xml, status, e );

 // Fire the global callback
 if ( s.global )
 jQuery.event.trigger( "ajaxError", [xml, s, e] );
 }
});

更多精彩内容,请点击《jQuery上传操作汇总》,《ajax上传技术汇总》进行深入学习和研究。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

jQuery 相关文章推荐
jQuery.ajax向后台传递数组问题的解决方法
May 12 jQuery
springmvc接收jquery提交的数组数据代码分享
Oct 28 jQuery
jquery-file-upload 文件上传带进度条效果
Nov 21 jQuery
jQuery 获取除某指定对象外的其他对象 ( :not() 与.not())
Oct 10 jQuery
jQuery pagination分页示例详解
Oct 23 jQuery
jQuery实现点击旋转,再点击恢复初始状态动画效果示例
Dec 11 jQuery
jQuery实现适用于移动端的跑马灯抽奖特效示例
Jan 18 jQuery
jQuery AJAX与jQuery事件的分析讲解
Feb 18 jQuery
JQuery样式操作、click事件以及索引值-选项卡应用示例
May 14 jQuery
jQuery实现的记住帐号密码功能完整示例
Aug 03 jQuery
Jquery高级应用Deferred对象原理及使用实例
May 28 jQuery
jQuery使用jsonp实现百度搜索的示例代码
Jul 08 jQuery
jquery实现抽奖功能
Oct 22 #jQuery
jQuery实现可以计算进制转换的计算器
Oct 19 #jQuery
jQuery实现计算器功能
Oct 19 #jQuery
jQuery实现推拉门效果
Oct 19 #jQuery
jQuery实现图片切换效果
Oct 19 #jQuery
jQuery实现回到顶部效果
Oct 19 #jQuery
jQuery实现放大镜案例
Oct 19 #jQuery
You might like
用PHP和ACCESS写聊天室(三)
2006/10/09 PHP
php实现通过soap调用.Net的WebService asmx文件
2017/02/27 PHP
ThinkPHP5 的简单搭建和使用详解
2018/11/15 PHP
laravel-admin 管理平台获取当前登陆用户信息的例子
2019/10/08 PHP
OfflineSave离线保存代码再次发布使用说明
2007/05/23 Javascript
firefox中用javascript实现鼠标位置的定位
2007/06/17 Javascript
js利用prototype调用Array的slice方法示例
2014/06/09 Javascript
JavaScript 学习笔记之语句
2015/01/14 Javascript
jQuery删除一个元素后淡出效果展示删除过程的方法
2015/03/18 Javascript
Bootstrap模态框(modal)垂直居中的实例代码
2016/08/18 Javascript
jQuery+正则+文本框只能输入数字的实现方法
2016/10/07 Javascript
微信页面倒计时代码(解决safari不兼容date的问题)
2016/12/13 Javascript
js模仿微信朋友圈计算时间显示几天/几小时/几分钟/几秒之前
2017/04/27 Javascript
VUE使用vuex解决模块间传值问题的方法
2017/06/01 Javascript
Vuex利用state保存新闻数据实例
2017/06/28 Javascript
什么是Vue.js框架 为什么选择它?
2017/10/17 Javascript
jQuery实现模糊查询的方法分析
2018/05/10 jQuery
Vue Router去掉url中默认的锚点#
2018/08/01 Javascript
vue 插件的方法代码详解
2019/06/06 Javascript
微信小程序整个页面的自动适应布局的实现
2020/07/12 Javascript
JavaScript/TypeScript 实现并发请求控制的示例代码
2021/01/18 Javascript
Python SMTP发送邮件遇到的一些问题及解决办法
2018/10/24 Python
Opencv+Python 色彩通道拆分及合并的示例
2018/12/08 Python
Python实现最常见加密方式详解
2019/07/13 Python
在PyCharm的 Terminal(终端)切换Python版本的方法
2019/08/02 Python
canvas学习笔记之2d画布基础的实现
2019/02/21 HTML / CSS
一张图片能隐含千言万语之隐藏你的程序代码
2012/12/13 HTML / CSS
VisionPros美国站:加拿大在线隐形眼镜和眼镜零售商
2020/02/11 全球购物
C/C++程序员常见面试题一
2012/12/08 面试题
中专自我鉴定
2014/02/05 职场文书
保护环境演讲稿
2014/05/10 职场文书
社区文艺活动方案
2014/08/19 职场文书
个人委托书怎么写
2014/09/17 职场文书
2015年试用期工作总结
2014/12/12 职场文书
将Python代码打包成.exe可执行文件的完整步骤
2021/05/12 Python
CSS 鼠标选中文字后改变背景色的实现代码
2023/05/21 HTML / CSS