JavaScript. Подробное руководство, 6-е издание, стр. 284
Далее описывается, как генерируются эти новые события в броузерах, поддерживающих их. Когда вызывается метод
<b>send(),</b><b>XMLHttpRequest</b>Завершение запроса не всегда означает успешное его выполнение, поэтому обработчик события «load» должен проверять код состояния в объекте
<b>XMLHttpRequest</b>Существуют три разные ситуации, когда HTTP-запрос оканчивается неудачей, которым соответствуют три события. Если предельное время ожидания ответа истекло, генерируется событие «timeout». Если выполнение запроса было прервано, генерируется событие «abort». (О предельном времени ожидания и о методе
<b>abort()</b>Для каждого запроса броузер может возбуждать только по одному событию «load», «abort», «timeout» и «error». Проект спецификации «ХНН2» требует, чтобы броузеры возбуждали событие «loadend» после одного из этих событий. Однако на момент написания этих строк событие «loadend» не было реализовано ни в одном из броузеров.
Для регистрации обработчиков всех этих событий, возникающих в ходе выполнения запроса, можно использовать метод
<b>addEventListener()</b><b>XMLHttpRequest</b><b>onprogress</b><b>onload</b><b>if ("onprogress" in (new XMLHttpRequest())) {</b><b> // События, возникающие в ходе выполнения запроса, поддерживаются</b><b>}</b>Объект события, связанный с этими событиями, возникающими в ходе выполнения запроса, в дополнение к свойствам обычного объекта
<b>Event</b><b>type</b><b>timestamp</b><b>loaded</b><b>total</b><b>lengthComputable</b><b>total</b><b>loaded</b><b>request.onprogress = function(e) { </b><b> if (e.lengthComputable)</b><b> progress.innerHTML = Math.round(100*e.loaded/e.total) + ”% Выполнено";</b><b>}</b>18.1.4.1. События, возникающие в ходе выгрузки
Кроме событий, которые удобно использовать для мониторинга загрузки НТТР-ответа, спецификация «ХНН2» также определяет события для мониторинга выгрузки HTTP-запроса. В броузерах, реализующих эту возможность, объект
<b>XMLHttpRequest</b><b>upload</b><b>upload</b><b>addEventListener()</b><b>onprogress</b><b>onload</b><b>onreadystatechange</b>Обработчики событий хода выполнения операции выгрузки можно использовать точно так же, как используются обычные обработчики событий хода выполнения загрузки. Для объекта х типа
<b>XMLHttpRequest</b><b>х.onprogress</b><b>х.upload.onprogress</b>Пример 18.11 демонстрирует, как использовать событие «progress», генерируемое в ходе выгрузки запроса, для организации обратной связи с пользователем. Этот пример также демонстрирует, как получать объекты
<b>File</b><b>FormData</b><b>XMLHttpRequest</b>Пример 18.11. Мониторинг хода выполнения операции выгрузки
<b>// Отыскивает все элементы с классом "fileDropTarget" и регистрирует </b><b>// обработчики событий механизма DnD, чтобы они могли откликаться </b><b>// на операции буксировки файлов. При сбросе файлов на эти элементы </b><b>// они выгружают их на URL-адрес, указанный в атрибуте data-uploadto. </b><b>whenReady(function() {</b><b> var elts = document.getElementsByClassName("fileDropTarget");</b><b> for(var і = 0; і < elts.length; i++) {</b><b> var target = elts[i];</b>