Javascript 来自XML请求的数组不是全局的
我请求服务器提供来自表teacher的名称,收到的响应很好,但无法从显示Teachers.length=0的其他函数访问下面代码中的Teachers数组。这是否是由于处理XML请求的延迟造成的,请解释一下,谢谢Javascript 来自XML请求的数组不是全局的,javascript,xml,Javascript,Xml,我请求服务器提供来自表teacher的名称,收到的响应很好,但无法从显示Teachers.length=0的其他函数访问下面代码中的Teachers数组。这是否是由于处理XML请求的延迟造成的,请解释一下,谢谢 document.onreadystatechange = function () { if (document.readyState === "complete") { // PAGE HAS BEEN LOADED Teachers = []; var object = [
document.onreadystatechange = function () {
if (document.readyState === "complete") { // PAGE HAS BEEN LOADED
Teachers = [];
var object = [];
var request = new XMLHttpRequest();
request.onreadystatechange = function() {
if (request.readyState === XMLHttpRequest.DONE) {
if (request.status === 200) {
object = JSON.parse(request.responseText);
for(var i = 0 ; i < object.length; i++){
Teachers.push(object[i].name.toString());
console.log("*" + Teachers.length);
}
}
console.log(Teachers.length);
}
};
request.open('GET', 'http://localhost:3000/names', true);
request.send(null);
CreateRow();
for(var i = 0; i < absentTeachers.length; i++){
PrepareRow(i, "row"+(i+1));
}
}}
document.onreadystatechange=函数(){
如果(document.readyState==“complete”){//页面已加载
教师=[];
var对象=[];
var request=new XMLHttpRequest();
request.onreadystatechange=函数(){
if(request.readyState==XMLHttpRequest.DONE){
如果(request.status==200){
object=JSON.parse(request.responseText);
对于(变量i=0;i
CreateRow等函数正在使用教师,但其显示为空,但当我在请求处理函数中记录教师长度时,其显示更改。您的代码遇到了问题,因为您需要同步功能。但是,Ajax请求是异步处理的 通常JS从代码的顶部开始,一直到底部。这是您习惯使用的功能。如果同步处理您的请求,那么您的代码将不会出现问题。但是:Javascript从顶部开始,到达请求,发送请求,然后继续执行其余代码。此时,您的
教师
数组仍然为空,因此不会发生任何事情
您需要做的是等待请求完成并且数据可用。(您可能会注意到,在获取填充数组的日志之前,会出现带有空数组的console.log
)
发生这种情况的原因是,当您的请求到达该点时,您正在调用控制台.log
。(同样,在请求内部从上到下)。因此,要解决您的问题,请创建一个函数,然后在Ajax请求中调用该函数
document.onreadystatechange = function () {
if (document.readyState === "complete") { // PAGE HAS BEEN LOADED
Teachers = [];
var object = [];
function createRow() {
for(var i = 0; i < absentTeachers.length; i++){
PrepareRow(i, "row"+(i+1));
}
}
var request = new XMLHttpRequest();
request.onreadystatechange = function() {
if (request.readyState === XMLHttpRequest.DONE) {
if (request.status === 200) {
object = JSON.parse(request.responseText);
for(var i = 0 ; i < object.length; i++){
Teachers.push(object[i].name.toString());
console.log("*" + Teachers.length);
}
}
createRow();
}
};
request.open('GET', 'http://localhost:3000/names', true);
request.send(null);
}}
document.onreadystatechange=函数(){
如果(document.readyState==“complete”){//页面已加载
教师=[];
var对象=[];
函数createRow(){
for(var i=0;i
我希望这能解决你的问题 您的代码遇到了问题,因为您需要同步功能。但是,Ajax请求是异步处理的 通常JS从代码的顶部开始,一直到底部。这是您习惯使用的功能。如果同步处理您的请求,那么您的代码将不会出现问题。但是:Javascript从顶部开始,到达请求,发送请求,然后继续执行其余代码。此时,您的
教师
数组仍然为空,因此不会发生任何事情
您需要做的是等待请求完成并且数据可用。(您可能会注意到,在获取填充数组的日志之前,会出现带有空数组的console.log
)
发生这种情况的原因是,当您的请求到达该点时,您正在调用控制台.log
。(同样,在请求内部从上到下)。因此,要解决您的问题,请创建一个函数,然后在Ajax请求中调用该函数
document.onreadystatechange = function () {
if (document.readyState === "complete") { // PAGE HAS BEEN LOADED
Teachers = [];
var object = [];
function createRow() {
for(var i = 0; i < absentTeachers.length; i++){
PrepareRow(i, "row"+(i+1));
}
}
var request = new XMLHttpRequest();
request.onreadystatechange = function() {
if (request.readyState === XMLHttpRequest.DONE) {
if (request.status === 200) {
object = JSON.parse(request.responseText);
for(var i = 0 ; i < object.length; i++){
Teachers.push(object[i].name.toString());
console.log("*" + Teachers.length);
}
}
createRow();
}
};
request.open('GET', 'http://localhost:3000/names', true);
request.send(null);
}}
document.onreadystatechange=函数(){
如果(document.readyState==“complete”){//页面已加载
教师=[];
var对象=[];
函数createRow(){
for(var i=0;i
我希望这能解决你的问题 请把我的答案投上一票,如果有帮助,请把你的问题标记为已回答。请把我的答案投上一票,如果有帮助,请把你的问题标记为已回答?