js之文件上传(含进度条,回调)向下兼容

这篇博客主要介绍了在HTML5之前和之后,如何使用JavaScript实现文件上传,并且包括上传进度条和回调函数的处理。在HTML5之前,通过form表单结合jsonp实现回调,利用额外的请求获取上传进度。而在HTML5中,XMLHttpRequest2.0提供了上传进度事件,可以直接利用FormData对象实现带进度条的文件上传。
摘要由CSDN通过智能技术生成

之前分享过一篇拖拽上传预览的实现是基于html5的,在那篇文章中,我们实现了拖拽预览,对于上传并没有特别提及到:这篇算作对文件上传的补充吧

在html5之前我们上传文件一般都会用form表单进行提交,from.submit()即可

ok,添加需求如下:

1.上传成功后执行回调函数

2.上传过程显示上传进度条

这两种需求都不为过,很多现实中都会需要用到

如果是ajax上传就可以很简单的实现两种效果,而form表单提交则要另想他法,但是传统的文件上传还是要基于form表单,

这里传统俩字为啥加粗了,因为是传统的,xhr2就开创了非传统先河,咱们后面会说到。

先说说传统的做法:

需求一:我们可以和后台进行配合利用jsonp去完成回调

function formAjax(fn){

var form =$(form),

now = (new Date()).getTime(),

jsonp = 'jsonp' + now,

callback={},

action = form.action;

callback[jsonp] = function(data){

fn && fn(data.statusText);

};

jsonp = 'zip_load.' + jsonp;

if(action.indexOf('callback') > -1){

action = action.replace(/zip_load.jsonp\d+/,jsonp);

}else{

action += (action.indexOf('?') > -1 ? '&callback=' : '?callback=') + jsonp;

}

form.action = action;

form.submit();

}

这种方式是利用jsonp方式定义一个函数名通过url传递给后台处理,成功后商议返回同名函数作为数据返回,前台再进行回调处理

需求二:我们在form中无法获得上传的任何消息,file文件是按照字节流上传的,不过我们可以利用ajax另外发送请求获得字节上传进度信息:

function progress(progress,fn){

var now = (new Date()).getTime();

if(progressUrl.indexOf('pro') > -1){

progressUrl = progressUrl.replace(/pro=\d+/,'pro=' + now);

}else{

progressUrl += (progressUrl.indexOf('?') > -1 ? '&pro=' : '?pro=') + now;

}

$.ajax({

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值