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回调函数内执行主程序,但是还是无法正确执行
时间: 2023-12-12 11:03:20 浏览: 168
xhttp:用于浏览器和Node中HTTP请求的轻量级库。 简单,同构,支持取消和进度跟踪
你的代码中存在一个问题,即在第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();
}
```
这样,就可以在获取数据成功后再进行其他操作,避免出现变量未定义的问题。
阅读全文