HTML с HTTP-запросом: всегда возвращает 0 - PullRequest
0 голосов
/ 22 сентября 2018

Я новичок в HTML с JavaScript:

Мой код:

var xhr = new XMLHttpRequest();
xhr.addEventListener("readystatechange", processRequest, false);

function processRequest(e) {
    if (xhr.readyState == 4 && xhr.status == 200) {
        console.log(xhr.status);
    }
    else{
        alert(xhr.status);
    }
}
xhr.open('GET', "http://localhost:8080/hello", true);
xhr.send();

Я всегда получаю xhr.status как 0?Я тестировал с Chrome и Edge.В чем проблема?

1 Ответ

0 голосов
/ 22 сентября 2018

Вы просматриваете 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.

...