XMLHttpRequestProgressEvent.total totalSize дает неправильное значение - PullRequest
3 голосов
/ 05 декабря 2011

Я слушаю 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, когда он завершен

Ответы [ 2 ]

0 голосов
/ 28 июля 2018

Это потому, что для totalSize задано максимальное значение беззнакового 64-разрядного целого числа, когда оно неизвестно .Вы должны положиться на lengthComputable, чтобы проверить, был ли возвращен заголовок content-length или нет.

0 голосов
/ 28 декабря 2011

На самом деле, если вы используете браузер на основе WebKit, вполне вероятно, что это ошибка WebKit, при которой длина -1 преобразуется без проверки на отрицательное значение: https://bugs.webkit.org/show_bug.cgi?id=36156

...