Вы просматриваете xhr.status
до завершения запроса.Проверяйте status
, только если readyState
равно 4
:
var xhr = new XMLHttpRequest();
xhr.addEventListener("readystatechange", processRequest, false);
function processRequest(e) {
if (xhr.readyState == 4) {
if (xhr.status >= 200 && xhr.status < 300) {
// All good
console.log(xhr.status);
}
else {
// Something went wrong
alert(xhr.status);
}
}
}
xhr.open('GET', "http://localhost:8080/hello", true);
xhr.send();
Тем не менее, во всех основных браузерах XMLHttpRequest
устарело.Вместо этого используйте fetch
:
fetch("http://localhost:8080/hello")
.then(response => {
if (!response.ok) {
throw new Error(response.status);
}
})
.then(response => {
// Read the body of the response
return response.text(); // or .json(), .arrayBuffer(), .blob(), .formData()
})
.then(data => {
// All good, use the data
})
.catch(error => {
// Handle the error
});
Если вы предпочитаете, вместо использования помощников .text
, .json
и т. Д., Вы можете использовать response.body
, чтоReadableStream
.
Вы сказали, что с обновленным кодом вы все еще получаете статус 0
.Единственный способ убедиться, что это происходит, - это если вы делаете запрос из разных источников и вам препятствует Политика одинакового происхождения .Вы должны получить довольно четкую ошибку в веб-консоли.Если это так, посмотрите на CORS (если вы контролируете другой конец) или JSONP или используйте сервер, чтобы сделать запрос за вас.Существует много информации о SOP и CORS.