2017-03-17 124 views
2

我做了相当多的搜索,感觉我的问题回答,但我无法整合可用的答案和我的特定情况。这是我第一次使用Javascript,对于几乎可以肯定地重复一个初学者问题而言,我很抱歉,这个问题可能在非常相似的情况下得到了充分的回答。基本上,我不明白为什么在调用fishTitle后,fishDirector的var queryDir始终保持未定义的值。调用函数的返回值在调用函数中未定义

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目录到被调用函数进行更新,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; 
} 

的默默,位于return语句是一种非制导努力,有匿名函数让它的调用函数知道目录是什么,然后返回给fishDirector,它叫做fishTitle。一旦匿名函数终止,我得到的印象是dir的值会丢失,但是如果是这样,我该如何才能将它从中取出?

Dumbdumbdumb。告我。

+0

对于异步标志,'XMLHttpRequest'设置为'true'。 'load'事件之前''dir'返回''return dir'。在'var queryTypeDir“处也缺少'='”director =“;' – guest271314

回答

0

这是因为它是一个异步的Ajax请求。 Tḧat意味着你的请求被放在不同的线程中,并且你的主线程继续执行。

,这样你就var queryDir = fishTitle();和运行一路结束,开始执行的另一个线程和返回undefined。

后,当该其他线程得到处理,也可以设定DIR的值,但是执行的主磁通已经结束。

读guest271314答案看到的处理它的方式之一。教育你自己关于Ajax和异步编程以提高这种理解。

+0

感谢你们俩!我尝试着争分夺秒地用JavaScript过滤所有关于异步请求的必要知识 - 甚至都不知道这是我不知道的。 – Kangles

+0

NP。如果您发现任何答案有用,请接受/ upvote。谢谢。 –

相关问题