Javascript XMLHttpRequest-event.loaded和event.total值存在问题
我使用XMLHttpRequest进行文件上传,在浏览器中我有一个进度条,显示图像的很大一部分已经上传Javascript XMLHttpRequest-event.loaded和event.total值存在问题,javascript,ajax,event-handling,xmlhttprequest,dom-events,Javascript,Ajax,Event Handling,Xmlhttprequest,Dom Events,我使用XMLHttpRequest进行文件上传,在浏览器中我有一个进度条,显示图像的很大一部分已经上传 xhr.upload.addEventListener('progress', onprogressHandler, false); function onprogressHandler(event) { resp.innerHTML = event.loaded +' and '+ event.total; var percent = Math.round
xhr.upload.addEventListener('progress', onprogressHandler, false);
function onprogressHandler(event) {
resp.innerHTML = event.loaded +' and '+ event.total;
var percent = Math.round((event.loaded / event.total) * 100);
var calc_display = document.getElementById('calc');
calc_display.innerHTML = percent;
};
如果我选择一个图像进行上传并发送表单,那么我看到的event.loaded
和event.total的值总是相同的。
我认为值event.total
是文件的大小
我是一个新手,所以我没有那么多的经验,但我怎么可能总是有相同的价值观呢?(通常约2.700.000 kB)
哪里可能有问题?提到进度事件也可以具有布尔值.lengthComputeable
属性。如果在进度事件中该属性为false,我希望event.loaded
和event.total
的值不会反映上载的进度
该规范规定,如果设置了XMLHttpRequest的内容长度
头,则.lengthComputeable
将为真,.total
将反映文件的长度。结果是——搜索该锚点正下方的内容长度。他们这样做可能是因为脚本可能会错误计算它发送的数据的长度,而用户代理这样做的可能性要小得多
查看服务器正在接收的请求。他们有内容长度标题吗?嗨,ellisbben,是的。如果我将发送表单并查看控制台,那么我会看到Content Length 2730561 X-File-Name SDC10289-1.JPG Content Type image/jpeg
和Content Length
我设置为xhr.setRequestHeader(“Content Length”,File.size)代码>。还有什么问题吗?首先,使用console.log(百分比)代码>或calc_display.innerHTML+=percent+“
”代码>以便您可以确保该值不会更改。尝试分别记录和查看event.lengthComputable
、event.loaded
和event.total
的值,以及percent
值,例如使用console.log([percent,event.lengthcumputable,event.loaded,event.total])代码>;让我知道你发现了什么。好吧,我做了你写给我的一切。首先-值仍然相同(仍然为“100”)。我试图记录百分比
和事件
,结果是:[52,true,14085562684842]
和[100,true,268428426842]
。在firebug中,我看到了POST/photos/upload 200 OK 2778ms
,但在我的页面上,我只看到了数字100(%),我现在认为您的代码运行良好,我愚蠢地忽略了简单的解释。您是否尝试过calc_display.innerHTML+=percent+“
”
而不是calc\u display.innerHTML=百分比代码>?这应该会在您的页面上显示您在控制台中看到的百分比值。是的,我这样做了,我得到了以下结果:[23,true,638716,2772369][65,true,1800680,2772369][100,true,2772369,2772369]
(23%-65%-100%)。但我看到值为100%,然后上传在接下来的2-3秒内完成。。。那看起来不太好。