用 XMLHttpRequest 上传文件时进度条不更新怎么办?
我用 XMLHttpRequest 做了个文件上传功能,想加个进度条,但 onprogress 回调根本没触发。试过把监听写在 open 之前和之后,都不行。后台接口是正常的,文件能传上去。
这是我的代码:
const xhr = new XMLHttpRequest();
xhr.open('POST', '/upload');
xhr.upload.onprogress = function(e) {
if (e.lengthComputable) {
console.log('进度:', e.loaded / e.total);
}
};
xhr.send(formData);
控制台完全没输出,是不是哪里顺序错了?还是服务器要配什么头?
Content-Length头,所以e.lengthComputable是 false,自然进不去 if 里。加一句后端返回
Content-Length头就行,或者你先临时去掉 if 判断看看有没有值:如果 total 是 0 就是后端没传 Content-Length,加个
header('Content-Length: ' . filesize($file))(PHP)或者对应语言的响应头就行,差不多就行。