到网上搜了许多关于上传显示进度条的文章,用jquery的ajax上传文件的,一般用以下属性来获得进度条的百分比
processData: false, // 告诉jQuery不要去处理发送的数据
contentType: false, // 告诉jQuery不要去设置Content-Type请求头
xhr:function(){
myXhr = $.ajaxSettings.xhr();
if(myXhr.upload){ // check if upload property exists
myXhr.upload.addEventListener('progress',function(e){
var loaded = e.loaded; //已经上传大小情况
var total = e.total; //附件总大小
var percent = Math.floor(100*loaded/total)+"%"; //已经上传的百分比
console.log("已经上传了:"+percent);
$("#processBar").css("width",percent);
}, false); // for handling the progress of the upload
}
return myXhr;
},
processData: 要求为Boolean类型的参数,默认为true。默认情况下,发送的数据将被转换为对象(非字符串)以配合默认内容类型"application/x-www-form-urlencoded"。如果要发送DOM树信息或者其他不希望转换的信息,请设置为false。
contentType参数,发起http请求时设置的请求头中的contentType。jQuery.ajax()默认的值为:
'application/x-www-form-urlencoded; charset=UTF-8',这个在大多数情况下都是适用的。
这里先将contentType设置为false,即不让jQuery设置contentType。
但是我在项目中用了$.ajax上传数据是成功的,但是为了获得上传的进度,加了contentType: false, processData: false之后,前台返回的数据为空,后台获得的数据也是null,不太清楚怎么回事,有可能是对ajax2.0功能不太了解,应该是ajax2.0才可以获得数据传输的进度信息,之后解决了再更新吧。
参考文章
基于jQuery的ajax系列之用FormData实现页面无刷新上传