为什么这个变量没有在javascript中返回?
我试图在我编写的函数中返回从这个XML请求获得的数据。但是,由于某些原因,该函数返回未定义的。我已经检查以确保请求从txt文件中获取数据,并且它是。如果我在尝试设置输出变量的地方输入console.log,则它具有正确的信息。我不知道为什么它不能返回那个变量 下面是函数:为什么这个变量没有在javascript中返回?,javascript,Javascript,我试图在我编写的函数中返回从这个XML请求获得的数据。但是,由于某些原因,该函数返回未定义的。我已经检查以确保请求从txt文件中获取数据,并且它是。如果我在尝试设置输出变量的地方输入console.log,则它具有正确的信息。我不知道为什么它不能返回那个变量 下面是函数: function localSource() { let output; let link = "questions/set0.txt" let request = new XMLH
function localSource() {
let output;
let link = "questions/set0.txt"
let request = new XMLHttpRequest();
request.open('GET', link, true);
request.onload = function () {
if (request.status >= 200 && request.status < 400) {
output = JSON.parse(this.response);
} else {
console.log("ERROR: Unable to fetch new set");
}
}
request.send();
return output;
}
函数localSource(){
让输出;
let link=“questions/set0.txt”
let request=new XMLHttpRequest();
打开('GET',link,true);
request.onload=函数(){
如果(request.status>=200&&request.status<400){
output=JSON.parse(this.response);
}否则{
log(“错误:无法获取新集合”);
}
}
request.send();
返回输出;
}
我有一个类似的功能,从不同的网站获取数据。此函数用于将对象推送到输出数组。由于某种原因,这起作用并且返回了输出
这是一个有效的函数:
function remoteSource() {
let output = [];
let link = "https://www.randomtriviagenerator.com/questions?limit=256"
let request = new XMLHttpRequest();
request.open('GET', link, true);
request.onload = function () {
if (request.status >= 200 && request.status < 400) {
let obj = JSON.parse(this.response);
for (let i = 0; i < obj.length; i++) {
let element = {
question: obj[i].question,
answer: obj[i].answer,
category: obj[i].categories[0]
}
output.push(element);
}
} else {
console.log("ERROR: Unable to fetch new set");
}
}
request.send();
return output;
}
函数remoteSource(){
让输出=[];
让链接=”https://www.randomtriviagenerator.com/questions?limit=256"
let request=new XMLHttpRequest();
打开('GET',link,true);
request.onload=函数(){
如果(request.status>=200&&request.status<400){
让obj=JSON.parse(this.response);
for(设i=0;i
以下是输出(它不允许我嵌入):
这显示localSource函数不返回任何内容,只返回console.logging将要返回的数据。它还显示了按预期返回数组的remoteSource函数
任何帮助都将不胜感激 添加到
onload
的函数只有在从函数返回后才执行,这太晚了,就像onload函数运行之前一样,您的输出
数组没有填充。处理这一问题的标准方法是使用承诺。但是,如果可以的话,我建议您查看fetchapi而不是XMLHTTPRequest,因为它本机使用承诺而不是回调。