Использование XMLHttpRequest.readyState вне обработчиков
MDN предлагает отслеживать загрузку XMLHttpRequest через события (progress, load, error и др.), в том числе через событие onreadystatechange, возникающее при изменении поля readyState.
Таким образом в обработчике onreadystatechange можно прочитать поле readyState и определить дальнейшие действия в зависимости от его значения.
Вопрос — можно ли использовать это поле (readyState) вне обработчиков событий XMLHttpRequest, например по таймеру или в обработчике клика мышки. Будет ли состояние этого поля в этом случае актуально? Или актуальность гарантируется только внутри вызовов обработчиков XMLHttpRequest?
Update
Такой же вопрос и касательно поля status (который показывает статус ответа на запрос, такой как 200, 404 и т.п.), если, к примеру, его значение равно 404 вне обработчиков событий XMLHttpRequest, можно ли это трактовать как неуспешный запрос?
Ответы (2 шт):
Конечно, можно.
const xhr = new XMLHttpRequest(),
method = "GET",
url = "https://ru.stackoverflow.com/topbar/inbox?_="+Date.now();
let readyState = null, status = null;
xhr.open(method, url, true);
xhr.onreadystatechange = function () {
// In local files, status is 0 upon success in Mozilla Firefox
readyState = xhr.readyState;
console.log('readyState', readyState);
if(readyState === XMLHttpRequest.DONE) {
status = xhr.status;
}
};
let interval = setInterval(()=>{
if(readyState){
clearInterval(interval);
console.log('status', status);
console.log('data', xhr.responseText);
}
}, 50);
xhr.send();
Данные поля расположены в объекте XMLHttpRequest, следовательно, обращаться к ним можно отовсюду, где доступен конкретный объект, в данном случае xhr.
Обработчики событий просто позволяют поймать конкретный момент, в который меняются значения полей.