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 循环遍历改变a标签的href(实例讲解)
Jul 12 jQuery
基于JQuery的Ajax方法使用详解
Aug 16 jQuery
jQuery实现点击下拉框中的值累加到文本框中的方法示例
Oct 28 jQuery
jQuery niceScroll滚动条错位问题的解决方法
Feb 03 jQuery
jQuery 改变P标签文本值方法
Feb 24 jQuery
jQuery中ajax请求后台返回json数据并渲染HTML的方法
Aug 08 jQuery
jQuery模拟12306城市选择框功能简单实现方法示例
Aug 13 jQuery
jquery.pager.js分页实现详解
Jul 29 jQuery
jquery获取并修改触发事件的DOM元素示例【基于target 属性】
Oct 10 jQuery
jQuery实现轮播图效果demo
Jan 11 jQuery
jquery绑定事件 bind和on的用法与区别分析
May 22 jQuery
JQuery基于FormData异步提交数据文件
Sep 01 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结合正则获取字符串中数字
2015/06/19 PHP
php微信公众号开发之简答题
2018/10/20 PHP
js利用Array.splice实现Array的insert/remove
2009/01/13 Javascript
Javascript Ajax异步读取RSS文档具体实现
2013/12/12 Javascript
原生js和jQuery随意改变div属性style的名称和值
2014/10/22 Javascript
原生js实现模拟滚动条
2015/06/15 Javascript
JavaScript动态添加css样式和script标签
2016/07/19 Javascript
基于Vuejs和Element的注册插件的编写方法
2017/07/03 Javascript
微信小程序实现简单input正则表达式验证功能示例
2017/11/30 Javascript
详解Vue.js中.native修饰符
2018/04/24 Javascript
vue动画之点击按钮往上渐渐显示出来的实例
2018/09/29 Javascript
node 文件上传接口的转发的实现
2019/09/23 Javascript
webpack优化之代码分割与公共代码提取详解
2019/11/22 Javascript
详解Python的Django框架中inclusion_tag的使用
2015/07/21 Python
微信 用脚本查看是否被微信好友删除
2016/10/28 Python
Python实现字符串反转的常用方法分析【4种方法】
2017/09/30 Python
django在接受post请求时显示403forbidden实例解析
2018/01/25 Python
Python比较配置文件的方法实例详解
2019/06/06 Python
Djang的model创建的字段和参数详解
2019/07/27 Python
python 进程间数据共享multiProcess.Manger实现解析
2019/09/23 Python
django 框架实现的用户注册、登录、退出功能示例
2019/11/28 Python
Python3和PyCharm安装与环境配置【图文教程】
2020/02/14 Python
Python Serial串口基本操作(收发数据)
2020/11/06 Python
10个示例带你掌握python中的元组
2020/11/23 Python
Spartoo瑞典:鞋子、包包和衣服
2018/09/15 全球购物
南京迈特望C/C++面试题
2012/07/09 面试题
本科生的职业生涯规划范文
2014/01/09 职场文书
高中考试作弊检讨书
2014/01/14 职场文书
《和田的维吾尔》教学反思
2014/04/14 职场文书
三年级评语大全
2014/04/23 职场文书
解放思想大讨论活动心得体会
2014/09/11 职场文书
大足石刻导游词
2015/02/02 职场文书
大学生逃课检讨书
2015/05/04 职场文书
Vue的列表之渲染,排序,过滤详解
2022/02/24 Vue.js
Java实现学生管理系统(IO版)
2022/02/24 Java/Android
苹果macOS 13开发者预览版Beta 8发布 正式版10月发布
2022/09/23 数码科技