我尝试使用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我错过了某种事件监听器吗?
答案 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