在使用xampp在本地主机上运行index.html时,会出现错误:
index.html:17未捕获的InvalidStateError:无法在“ XMLHttpRequest”上执行“发送”:对象的状态必须为OPENED.sendAjax @ index.html:17onclick @ index.html:28
这是index.html文件:
<!DOCTYPE HTML>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>Show Ajax</title>
<script>
var xhr = new XMLHttpRequest();
xhr.onreadystatechange = function () {
if(xhr.readyState === 4){
document.getElementById('ajax').innerHTML = xhr.responseText;
}
xhr.open('GET', 'data.html');
};
function sendAjax(){
xhr.send();
document.getElementById('load').style.display = "none";
}
</script>
</head>
<body>
<h1>Bring on ajax</h1>
<button id="load" onClick="sendAjax()">bring it</button>
<div id="ajax">
</div>
</body>
</html>
这是data.html文件:
<!DOCTYPE HTML>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>Untitled Document</title>
</head>
<body>
<p> Hello I'm Ajax, came here on your request</p>
</body>
</html>
最佳答案
您无法在readyState
处理程序内打开请求,因为该处理程序仅在发出请求时才触发,在打开请求后,必须在调用readyState
处理程序之前但在定义之后打开请求,表示在函数之后。
通常,还应该为每次调用sendAjax
函数创建一个新的请求对象,除非您有很好的理由不这样做
function sendAjax(){
var xhr = new XMLHttpRequest();
xhr.onreadystatechange = function () {
if(xhr.readyState === 4 && xhr.status === 200) {
document.getElementById('ajax').innerHTML = xhr.responseText;
}
};
xhr.open('GET', 'data.html');
xhr.send();
document.getElementById('load').style.display = "none";
}