Определите, когда XMLHttpRequest подключился
Я пытаюсь определить, когда долго работающий XMLHttpRequest действительно подключился к серверу.
Прямо сейчас, когда я слушаю событие readystatechange, оно срабатывает только после завершения запроса. Мой тестовый сервер отправляет заголовки и некоторые данные, и после долгого времени ожидания (10 секунд) он завершает запрос. XHR генерирует события только в самом конце, а затем выполняет одно для каждого из следующих состояний последовательно: HEADERS_RECEIVED, LOADING, DONE.
Вот мой код браузера:
var xhr = new XMLHttpRequest();
xhr.open('GET', url, true);
xhr.onreadystatechange = function(evt) {
console.log('Request is now in state ' + xhr.readyState);
if(xhr.readyState === xhr.HEADERS_RECEIVED) {
console.log('Request has started');
}
if(xhr.readyState === xhr.DONE) {
console.log('Request is finished');
}
};
xhr.send(null);
Как я могу определить, когда заголовки были фактически получены? Я предполагаю, что не могу определить, когда начинается запрос, основываясь на том, что доступно в API.
До сих пор я придумал следующее:
- Установить метод запроса на POST
- Отправить некоторые данные, когда запрос открыт, например
xhr.send('something')
- Слушай
xhr.upload.onload
Перезвоните
Как это:
xhr.upload.onload = function(evt) {
console.warn('Request has started');
};
Это работает только в Firefox и Safari. Не Chrome или IE.
1 ответ
Объект XMLHttpRequest имеет 5 состояний готовности
- 0 = неинициализировано
- 1 = загрузка
- 2 = загружен
- 3 = интерактивный
- 4 = завершено
Вы просто проверяете два из них в своем коде. Также вы должны использовать else if
для эффективности.