XMLHttpRequest - проблема со значениями event.loaded и event.total - PullRequest
0 голосов
/ 12 сентября 2011

Я использую 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 кБ)

Где может быть проблема? Большое вам спасибо

1 Ответ

2 голосов
/ 12 сентября 2011

В спецификации события прогресса упоминается, что событие прогресса также может иметь логический атрибут .lengthComputable. Если этот атрибут имеет значение false для события прогресса, я ожидаю, что значения event.loaded и event.total не будут отражать ход загрузки.

В спецификации сказано, что .lengthComputable будет истинным, а .total будет отражать длину файла, если установлен заголовок Content-Length XMLHttpRequest. Оказывается, что XMLHttpRequest не позволит установить Content-Length - поиск Content-Length прямо под этим якорем. Предположительно, они делают это, потому что скрипт может неправильно рассчитать длину отправляемых данных, и пользовательский агент с меньшей вероятностью сделает это.

Посмотрите на запросы, которые получает ваш сервер. У них есть заголовок Content-Length?

...