将变量赋给ajax responseText

时间:2018-03-30 02:18:18

标签: javascript ajax

我尝试使用ajax将文件的文本内容加载到变量中。

函数readFile()似乎工作正常。我认为问题在于我的档案,' countries.csv'很重要,加载时间太长,因此console.log(x)只会返回' undefined'

// last argument in open() is async; must be true or else chrome gives an error

function readFile(file) {
  var xhr = new XMLHttpRequest();
  xhr.open('GET', file, true);
  xhr.onreadystatechange = function () {
    if(xhr.readyState === 4 && xhr.status === 200) {
      var fileContent = xhr.responseText;
      // console.log(fileContent); <-- this line would work just fine
      return fileContent;
    }
  }
  xhr.send(null);
}


// so this next line takes some time to run
var x = readFile('/data/countries.csv');

// and this line runs before the last line is done
console.log(x);

我该怎么做才能加载文件的内容&#39; countries.csv&#39;在我开始实际使用变量x?

之前进入变量x

我错过了某种事件监听器吗?

1 个答案:

答案 0 :(得分:2)

你需要传递一个回调:)

尝试

function readFile(file, cb) {
  var xhr = new XMLHttpRequest();
  xhr.open('GET', file, true);
  xhr.onreadystatechange = function () {
    if(xhr.readyState === 4 && xhr.status === 200) {
      var fileContent = xhr.responseText;
      return cb(fileContent);
    }
  }
  xhr.send(null);
}

readFile('/data/countries.csv', thing => console.log(thing));

这里有一些额外的东西可以在javascript中了解有关回调/异步编程的更多信息:http://www.learn-js.org/en/Callbacks