Определите, когда XMLHttpRequest подключился - PullRequest
0 голосов
/ 16 августа 2011

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

2 голосов
/ 17 августа 2011

Объект XMLHttpRequest имеет 5 состояний

  • 0 = неинициализировано
  • 1 = загрузка
  • 2 = загружено
  • 3 = интерактивный
  • 4 = завершено

Вы просто проверяете два из них в своем коде. Также вы должны использовать else if для эффективности.

...