我尝试通过此代码检测页面状态是否为404:
var request = new XMLHttpRequest();
request.open('GET', 'http://xxxxxxxx.me/yossi/default.aspx', true);
request.send();
if (request.status === "404") {
alert("Oh no, it does not exist!");
}
我在浏览器控制台中遇到了这个最严重的错误:
Uncaught InvalidStateError:无法从'XMLHttpRequest'读取'status'属性:对象的状态不能打开。
任何线索是什么?
答案 0 :(得分:2)
您正在以ASYNC request.open('GET', 'http://*****/yossi/default.aspx', true);
(请求的true
部分)打开连接。
这意味着进行了request.send();
调用,立即继续执行您的程序。当您的程序继续处理下一行代码时,XMLHttpRequest在后台执行自己的工作并发出HTTP请求,因此当命中以下代码时,连接当前处于“打开”状态:
if (request.status === "404") {
alert("Oh no, it does not exist!");
}
request.send();
调用同步(vs async)。这是 NOT RECOMMENDED ,因为在您的请求返回之前,浏览器的用户界面将会冻结。state
发生更改时添加回调。这是通过onreadystatechange
变量的request
属性完成的。在回调中,您可以检查状态,因为在请求完成之前,您甚至无法知道状态是否为“404”(或任何其他状态)。摘自http://www.w3schools.com/ajax/ajax_xmlhttprequest_onreadystatechange.asp 使用onreadystatechange
回调的异步调用示例:
request.onreadystatechange = function() {
if (request.readyState==4 && xmlhttp.status==404) {
alert("Oh no, it does not exist!");
}
}
答案 1 :(得分:1)
像这样制作你的if块:
if (request.readyState == 4 && request.status === 404) { ... }
您不会等到页面完成加载。您正在使用异步请求,但您处理它的方式使其同步。如果我是你,我会查找异步AJAX或尝试使用JQuery。
https://developer.mozilla.org/en-US/docs/Web/API/XMLHttpRequest