ajax无刷新上传

这篇来学习一下ajax添加的新特性进度事件,通过这个事件,我们可以做到无刷新的上传和下载。

--upload.onprogress : 上传进度(可以用来做进度条)

--FormData对象

--ev.total(已发送的总量)、ev.loaded(待发送的总量)

--onprogress : 下载

 1.先创建按钮,并获取


2.获取要发送给后端的对象:file控件中选择的文件列表对象==》myfile.files,循环这个对象,myfile.files[0],这个就是要发送给后端的

ajax无刷新上传_第1张图片

3.发送ajax请求

ajax无刷新上传_第2张图片

这个发送方式不对,上面已有备注

下面是正确的方式:newFormData()通过这个对象来构建提交数据


ajax无刷新上传_第3张图片

4.实现上传进度条


ajax无刷新上传_第4张图片

Title

#div1{width:300px;height:30px;border:1px solid#000;position:relative}

#div2{height:30px;background:#ccc}

#div3{width:300px;height:30px;line-height:30px;position:absolute;left:0;top:0;}

0%

varmyfile=document.getElementById('myfile')

varbtn=document.getElementById('btn')

vardiv1=document.getElementById('div1')

vardiv2=document.getElementById('div2')

vardiv3=document.getElementById('div2')

btn.onclick=function() {

alert(myfile.value)//获取到的是file控件的value,是显示给你看的文字,不是选择的文件,是字符串

alert(myfile.files)//file控件中选择的文件列表对象

for(varattrinmyfile.files){

//console.log(attr+':'+myfile.files[attr])

console.log(attr+':'+myfile.files[0])

//0:[object File]文件对象,通过ajax把myfile.files[0]这个数据发送给后端

//s.html?_ijt=829th128krdshm12cc2g3fuqh6:17 length:1

//s.html?_ijt=829th128krdshm12cc2g3fuqh6:17 item:function item() { [native code] }

}

varxhr=newXMLHttpRequest();

//监听上传

xhr.onload=function(){

vard=JSON.parse(this.responseText)//请求成功的数据

alert('ok,上传完成!')

}

varoUpload=xhr.upload;//提供了很多方法,比如进度事件

oUpload.onprogress=function(ev){//这个事件会在上传中连续被触发

console.log(ev.total()+':'+ev.loaded);

variScale=ev.loaded/ev.total;//算出比例关系

div2.style.width=300*iScale+'px'

div3.innerHTML=iScale*100+'%'

}

xhr.open('post','post_file.php',true)

xhr.setRequestHeader('X-Request-with','XMLHttpRequest')

varoFormData=newFormData()

oFormData.append('file',myfile.files[0])

xhr.send(oFormData);

}

你可能感兴趣的:(ajax无刷新上传)