Я пытаюсь определить, когда долго работающий 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.