带有HTTP请求的HTML:始终返回0

时间:2018-09-22 07:38:21

标签: javascript html google-chrome httprequest microsoft-edge

我是不熟悉JavaScript的HTML的人

我的代码是:

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 :(得分:0)

请求完成之前,您正在查看xhr.status。仅在statusreadyState时检查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(它是ReadableStream)代替.jsonresponse.body等助手。


您说过,更新后的代码仍处于0状态。我能看到的唯一方法是,如果您正在发出跨域请求,并且受到Same Origin Policy的阻止。您应该在Web控制台中得到一个非常明确的错误。如果是这种情况,请查看CORS(如果您控制另一端)或JSONP或使用服务器为您发出请求。那里有 很多 有关SOP和CORS的信息。