【问题标题】:XMLHttpRequestProgressEvent.total totalSize giving wrong valueXMLHttpRequestProgressEvent.total totalSize 给出错误值
【发布时间】:2012-01-13 07:45:55
【问题描述】:

我正在收听xhr.onprogress

request.onprogress = function(e){
    return conf.progress ? conf.progress(e) : null;
};

conf.progress 在哪里

function(e){
    var position = e.position || e.loaded;
    var total = e.totalSize || e.total;
    var percent = ((e.loaded/e.total)*100)+"";
    console.log(percent);
    console.log(position, total);
    console.log(e);
}

percent 在控制台中产生错误的值,例如 2.789069431137492e-11,这就是 console.log(e) 打印的内容

XMLHttpRequestProgressEvent
    bubbles: false
    cancelBubble: false
    cancelable: true
    clipboardData: undefined
    currentTarget: undefined
    defaultPrevented: false
    eventPhase: 2
    lengthComputable: false
    loaded: 4982035
    position: 4982035
    returnValue: true
    srcElement: undefined
    target: undefined
    timeStamp: 1323097256269
    total: 18446744073709552000
    totalSize: 18446744073709552000
    type: "progress"
    __proto__: XMLHttpRequestProgressEvent

为什么e.totalSize: 18446744073709552000 这么大,甚至在文档完全加载后e.loaded: 4982035 因为totalSize 应该等于loaded 完成时

【问题讨论】:

  • 我注意到lengthComputable 在您的情况下是false,据我了解,这意味着您不能依赖total。当lengthComputable 为假时,我无法在网上找到total 行为的参考——我认为它会是0。David Flanagan 的“JavaScript:权威指南”p508 是我能找到的唯一讨论——全部lengthComputable 的其他搜索结果显示有人在使用它,但没有讨论该行为。
  • 图书链接:books.google.com/…

标签: ajax file-upload xmlhttprequest ajax-upload


【解决方案1】:

那是因为totalSize is set to the maximum value of an unsigned 64-bit integer when it is unknown。您必须依靠 lengthComputable 来检查是否返回了 content-length 标头。

【讨论】:

    【解决方案2】:

    实际上,如果您使用的是基于 WebKit 的浏览器,则很可能是 WebKit 错误,即在未检查负数的情况下强制转换长度为 -1:https://bugs.webkit.org/show_bug.cgi?id=36156

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-11-11
      • 2012-10-20
      • 2014-12-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-07-14
      相关资源
      最近更新 更多