JQuery来提交表单文件还是比较方便的。问题是JQuery性能问题,去掉JQuery如何提交文件,并且监听文件的提交进度?提交表单文件
使用原生XMLHttpRequest技术提交文件时, 是不需要设置Content-Type[5]的。
对上传文件进行进度监听,是需要监听XMLHttpRequest的属性upload的progress[1]事件的。ProgressEvent的两个关键值loaded表示底层已经处理的字节数,单位是64位无符号整型,另一个total表示底层需要处理的总字节数。
r.upload.addEventListener('progress', function (e) {
var progressRateInt = parseInt(e.loaded * 100 / e.total);
var progress = document.getElementById("myProgress");
progress.value = progressRateInt;
var percent = document.getElementById("percent");
percent.innerHTML = progressRateInt+"%";
});
FormData的值提取出来组合成key1=value1&key2=value2...的形式。可直接发送。具体的项目例子可以看我的JavaWeb学院课程[6]开发JavaWeb网站精讲-基于JFinal框架的第四章第2课时。const oData = new FormData(form);
r.send(oData);
function asyncSubmit(form,action){
const oData = new FormData(form);
var progress = document.getElementById("myProgress");
progress.value = 0;
var r = new XMLHttpRequest();
r.open("POST", action,true);
r.onreadystatechange = function () {
if (r.readyState != 4 || r.status != 200) return;
var data = JSON.parse(r.responseText);
if(data.status == 1){
if(data.message.length > 0){
var imgPath = JSON.parse(data.message);
if(imgPath.bannerImg){
var bannerImg = document.getElementById("bannerImg");
bannerImg.value = imgPath.bannerImg;
var imgUrl = document.getElementById("img_url");
imgUrl.href = "/upload/"+imgPath.bannerImg;
}
}
}else{
alert("Submit error.");
}
};
r.upload.addEventListener('progress', function (e) {
var progressRateInt = parseInt(e.loaded * 100 / e.total);
var progress = document.getElementById("myProgress");
progress.value = progressRateInt;
var percent = document.getElementById("percent");
percent.innerHTML = progressRateInt+"%";
});
r.send(oData);
}