Javascript 无法读取';状态';来自'的属性;XMLHttpRequest';:对象';不能打开的状态
我尝试通过以下代码检测页面状态是否为404:Javascript 无法读取';状态';来自'的属性;XMLHttpRequest';:对象';不能打开的状态,javascript,Javascript,我尝试通过以下代码检测页面状态是否为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!"); } 我
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!");
}
我在浏览器控制台中遇到了一个最严重的错误:
未捕获的InvalidStateError:未能从“XMLHttpRequest”读取“status”属性:不能打开对象的状态
有什么线索吗?您正在以异步
请求的方式打开连接。open('GET','http://*****/yossi/default.aspx',true)代码>(请求的true
部分)
这意味着请求.send()代码>调用并立即继续执行程序。当您的程序继续处理下一行代码时,XMLHttpRequest正在后台执行自己的工作并发出HTTP请求,因此,当点击以下代码时,连接当前处于“打开”状态:
if (request.status === "404") {
alert("Oh no, it does not exist!");
}
你有两个选择
发出请求。发送()代码>调用同步(vs异步)。这是不推荐的,因为在呼叫过程中,浏览器的UI将冻结,直到您的请求返回
您需要为请求的状态发生更改时添加回调。这是通过关闭请求
变量的onreadystatechange
属性来完成的。在回调中,您可以检查状态,因为直到请求完成后,您才能够知道状态是否为“404”(或任何其他状态)。从
带有onreadystatechange
回调的异步调用示例:
request.onreadystatechange = function() {
if (request.readyState==4 && xmlhttp.status==404) {
alert("Oh no, it does not exist!");
}
}
使您的if块如下所示:
if (request.readyState == 4 && request.status === 404) { ... }
您不会等到页面加载完成。您使用的是异步请求,但您处理它的方式使其同步。如果我是你,我会查找异步AJAX或尝试使用JQuery
您能等一个readystatechanged
吗?例如,添加一个onreadstatechanged
侦听器。它是onreadystatechange事件处理程序,而不是onreadystatechanged。如果我尝试您的建议,它确实会消除错误,但不会检测到404状态。。有没有可能是因为使用了readyState?我已经6个月没有编写过没有JQuery的AJAX了,但是你确定readyState是字符串吗?我链接到的文档指定它的数据类型是短的,我将编辑答案,这样它就不会像以前那样指定字符串。这样的回调?:xmlhttp.onreadystatechange=function(){…}是的,我在回答中添加了一些额外的代码,通过一个实际的示例更好地概括了这一点。不过,您需要进一步阅读关于这个和XMLHttpRequest的更多内容,以便更好地理解存在的就绪状态以及如何使用它们。我同意下面的@MaKR,您应该研究像jQuery这样的库,因为它处理得非常好,在这种情况下不能使用jQuery,所以我尝试使用JS来处理它。谢谢