Javascript XMLHttpRequest-event.loaded和event.total值存在问题

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

我使用XMLHttpRequest进行文件上传,在浏览器中我有一个进度条,显示图像的很大一部分已经上传

  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秒内完成。。。那看起来不太好。