XMLHttpRequest - event.loaded和event.total值的问题

时间:2011-09-11 23:06:06

标签: javascript ajax javascript-events event-handling xmlhttprequest

我使用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)

哪里可能有问题? 非常感谢你

1 个答案:

答案 0 :(得分:2)

progress event spec提到progress事件也可以具有布尔值.lengthComputable属性。如果某个进度事件的该属性为false,我希望event.loadedevent.total的值不会反映上传的进度。

规范说.lengthComputable将为true,如果设置了XMLHttpRequest的.total标头,Content-Length将反映文件的长度。结果是XMLHttpRequest will not allow setting Content-Length - 在该锚点下方搜索Content-Length。据推测,他们这样做是因为脚本可能会错误地计算它发送的数据的长度,而用户代理则不太可能这样做。

查看您的服务器正在接收的请求。他们有Content-Length标题吗?