我做了很多搜索并且感觉我的问题已经回答,但是我无法将可用的答案与我的特定情况相结合。这是我有史以来的第一个Javascript,我为几乎肯定会重复一个初学者问题而道歉,这个问题在非常相似的情况下可能得到了充分的回答。基本上,我不知道为什么fishDirector的var queryDir在调用fishTitle之后总是保持一个未定义的值。
function fishDirector() {
var dir = "";
var req = new XMLHttpRequest();
var URL = "https://netflixroulette.net/api/api.php?";
var queryTypeDir "director=";
var queryDir = fishTitle();
console.log(queryDir);
console.log(dir);
req.open('GET', URL + queryTypeDir + queryDir, true);
req.addEventListener("load", function() {
var response = JSON.parse(req.responseText);
req.send(null);
});
}
上面我天真地试图在调用函数中定义var dir,由被调用函数fishTitle:
更新function fishTitle() {
var req = new XMLHttpRequest();
var URL = "https://netflixroulette.net/api/api.php?";
var queryType = "title=";
var query = document.getElementById('form_search').value;
req.open('GET', URL + queryType + query, true);
req.addEventListener("load", function() {
var response = JSON.parse(req.responseText);
dir = dir + response.director;
console.log(dir);
return dir;
});
req.send(null);
return dir;
}
愚蠢的返回语句是一种无助的努力,让匿名函数让它的调用函数知道dir是什么,并将其返回给fishDirector,它叫fishTitle。我得到的印象是,一旦匿名函数终止,dir的值就会丢失,但如果是这样的话,我怎么把它从那里拿出来?
Dumbdumbdumb。告诉我。
答案 0 :(得分:0)
这是因为它是异步的ajax请求。 Tḧat意味着您将请求放在不同的线程中,并且您的主线程继续执行。
所以你做var queryDir = fishTitle();
并且它一直运行到最后,启动另一个执行线程并返回undefined。
稍后,当处理这个其他线程时,它可以设置dir值,但主要的执行流量已经完成。
阅读guest271314的答案,看看其中一种处理方式。教育自己关于ajax和异步编程,以提高这种理解。