Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/372.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 来自XML请求的数组不是全局的_Javascript_Xml - Fatal编程技术网

Javascript 来自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 = [

我请求服务器提供来自表teacher的名称,收到的响应很好,但无法从显示Teachers.length=0的其他函数访问下面代码中的Teachers数组。这是否是由于处理XML请求的延迟造成的,请解释一下,谢谢

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

我希望这能解决你的问题

请把我的答案投上一票,如果有帮助,请把你的问题标记为已回答。请把我的答案投上一票,如果有帮助,请把你的问题标记为已回答?