2017-03-17 63 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。謝謝。 –

相關問題