XMLHttpRequest – это класс, его представитель создаётся при помощи ключевого слова
new, и, присваивается, например, переменной
xhr.
Сообщение от Conus
|
как получить xhr.status === 200 без события readystatechange
|
проверять периодически, не равно xhr.status ли 200.
Вы можете получить статус тогда, когда получены заголовки. (это происходит тогда, когда xhr.readyState === 2, но чтобы это не выглядело очень магический, существуют обозначения для состоянии, т. е. другими словами, это происходит тогда, когда xhr.readyState === xhr.HEADERS_RECEIVED)
без события readystatechange, но тогда придётся проверять, чтобы код работал только при изменении состояния (кроме xhr.LOADING, но вы поняли)
плохой пример
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
</head>
<body>
<script>
const xhr = new XMLHttpRequest();
let i = 0, readyState, lastReadyState;
(function xhrLoop() {
let readyState = xhr.readyState;
if(readyState !== lastReadyState) {
switch(readyState) {
case xhr.UNSENT:
xhr.open("GET", "https://yesno.wtf/api", true);
break;
case xhr.OPENED:
xhr.send(null);
break;
case xhr.HEADERS_RECEIVED:
console.log(xhr.status);
break;
case xhr.LOADING:
break;
case xhr.DONE:
console.log(xhr);
return;
}
lastReadyState = readyState;
}
setTimeout(xhrLoop);
})();
</script>
</body>
</html>
но, конечно же более правильно использовать именно событие readystatechange, оно как раз происходит только при изменении состояния
хороший пример
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
</head>
<body>
<script>
const xhr = new XMLHttpRequest();
xhr.open("GET", "https://yesno.wtf/api", true);
xhr.send(null);
xhr.addEventListener("readystatechange", event => {
switch(xhr.readyState) {
case xhr.HEADERS_RECEIVED:
console.log(xhr.status);
break;
case xhr.LOADING:
break;
case xhr.DONE:
console.log(xhr);
break;
}
}, false);
</script>
</body>
</html>
Вообще событие readystatechange является частью интерфейса XMLHttpRequest, оно предназначено как раз для совместного использования!
Сообщение от Conus
|
получить xhr.status 200 в xmlhttp.readyState 1(это тоже самое, что xhr.OPENED)
|
Вы статус не получите до тех пор, пока не произойдёт xhr.readyState === xhr.HEADERS_RECEIVED, что в последнем примере и происходит!