form提交文件
方式1
1 | <form id="formAudio" method="post" enctype="multipart/form-data" name="formAudio" target="rfFrame"> |
form提交之后会刷新页面,追加个iframe
隐藏掉,然后把form
的target
设为iframe
的name
,这样form
刷新的就是iframe.
提交都服务端
1 | document.getElementById('formAudio').action = apiPath; |
方式2
动态创建<form>
,并通过append方法为其附加<input>
的值
1 | let formData = new FormData(); |
重点来了,怎么发送给服务端呢?
使用XHR
发送file
或者Blob
.注意所有file
都是Blob
,所以在此使用2者都可以.
//创建xhr对象
let xhr = new XMLHttpRequest();
//设置xhr请求超时时间
xhr.timeout = 3000;
//设置相应返回的数据格式
xhr.responseType = 'json';
//允许跨域请求
xhr.withCredentials = true;
//创建一个post 请求,采用异步.
xhr.open('POST',apiPath,true);
xhr.ontimeout = function (){//请求超时}
xhr.onload = function () {//上传成功,不需要返回的数据,这个事件也可以作为回调}
//每当readState 改变时,就会触发该事件
//readState(0-4)状态值
xhr.onreadystatechange = function (){
if(xhr.readState == 4){
if(xhr.status >= 200 && xhr.status < 300){
if(xhr.response && xhr.response.data)
{//上传成功,服务端返回的数据
}
}
}
//发送数据
xhr.send(formData)//表单数据默认Content-Type 为 multipart/form-data