new XMLHttpRequest().readyState==0
时间: 2024-04-28 12:25:55 浏览: 129
这段代码是用来创建 XMLHttpRequest 对象并检查其 readyState 属性是否为 0。readyState 表示 XMLHttpRequest 对象的状态,0 表示对象已创建但尚未调用 open() 方法。如果 readyState 不为 0,可能表示对象已经在使用中或者已经被销毁。通常情况下,我们需要在创建 XMLHttpRequest 对象后设置其各种属性和方法,然后调用 open() 方法来初始化请求,最后调用 send() 方法发送请求并接收响应。
相关问题
当xhr.readyState === 0,用什么函数可以拦截
当 `xhr.readyState === 0` 时,表示请求并未初始化。在这个状态下,你可以使用 `xhr.abort()` 函数来中止当前请求,并进行一些操作,例如发送新的请求。
以下是一个示例代码:
```
var xhr = new XMLHttpRequest();
xhr.onreadystatechange = function() {
if (xhr.readyState === 4) { // 请求完成
if (xhr.status === 200) { // 请求成功
var data = JSON.parse(xhr.responseText);
// 处理返回的数据
} else { // 请求失败
// 处理请求失败的情况
}
} else if (xhr.readyState === 0) { // 请求未初始化
// 中止当前请求
xhr.abort();
// 发送新请求
var newXHR = new XMLHttpRequest();
newXHR.open('GET', 'new-api-url', true);
newXHR.onreadystatechange = function() {
if (newXHR.readyState === 4 && newXHR.status === 200) {
// 新请求成功
var newData = JSON.parse(newXHR.responseText);
// 处理返回的数据
} else if (newXHR.readyState === 4) {
// 新请求失败
// 处理新请求失败的情况
}
};
newXHR.send();
}
};
xhr.open('GET', 'your-api-url', true);
xhr.send();
```
在这个示例代码中,我们在 `onreadystatechange` 事件中对请求状态进行了判断,如果请求未初始化(`readyState` 等于 0),则中止当前请求并发送新请求。新请求的地址为 "new-api-url",可以根据实际情况进行修改。同时,我们也对新请求的状态进行了判断,并在请求成功或失败时进行处理。
function getData() { var xhttp = new XMLHttpRequest(); xhttp.onreadystatechange = function () { var xhr = new XMLHttpRequest(); xhr.onreadystatechange = function () { if (xhr.readyState == XMLHttpRequest.DONE) { if (xhr.status == 200) { var jsonData = JSON.parse(xhr.responseText); var root = { id: rootId, name: rootName, children: getChildren(jsonData, rootId) }; buildTree($('#tree tbody'), root.children); // 初始化 treegrid $('#tree').treegrid({ expanderExpandedClass: 'glyphicon glyphicon-minus', expanderCollapsedClass: 'glyphicon glyphicon-plus' }); if (this.readyState == 4 && this.status == 200) { username = this.responseText; alert("ajx获取用户名:" + this.responseText); } else { alert("请求失败:" + xhr.statusText); } } }; xhr.open("GET", "shouquan.php?username=" + username, true); xhr.send(); } }; xhttp.open("GET", "getdata.php", true); xhttp.send(); }我在onreadystatechange回调函数内执行主程序,但是还是无法正确执行
你的代码中存在一个问题,即在第13行(`xhr.open("GET", "shouquan.php?username=" + username, true);`)中使用了 `username` 变量,但是在此之前 `username` 变量并没有被定义。因此,此处的 `username` 值为 undefined,导致请求失败。
解决方案是将获取用户名的代码移动到 `var jsonData = JSON.parse(xhr.responseText);` 的后面,即在获取数据成功后再进行用户名的获取和授权的请求。例如:
```
if (xhr.status == 200) {
var jsonData = JSON.parse(xhr.responseText);
var root = { id: rootId, name: rootName, children: getChildren(jsonData, rootId) };
buildTree($('#tree tbody'), root.children);
// 初始化 treegrid
$('#tree').treegrid({
expanderExpandedClass: 'glyphicon glyphicon-minus',
expanderCollapsedClass: 'glyphicon glyphicon-plus'
});
// 获取用户名和授权
var xhrAuth = new XMLHttpRequest();
xhrAuth.onreadystatechange = function() {
if (xhrAuth.readyState == 4 && xhrAuth.status == 200) {
username = xhrAuth.responseText;
alert("ajx获取用户名:" + username);
// 进行授权请求
var xhrShouquan = new XMLHttpRequest();
xhrShouquan.onreadystatechange = function() {
if (xhrShouquan.readyState == 4 && xhrShouquan.status == 200) {
alert("授权成功");
}
};
xhrShouquan.open("GET", "shouquan.php?username=" + username, true);
xhrShouquan.send();
} else {
alert("请求失败:" + xhrAuth.statusText);
}
};
xhrAuth.open("GET", "getusername.php", true);
xhrAuth.send();
}
```
这样,就可以在获取数据成功后再进行其他操作,避免出现变量未定义的问题。
阅读全文