我試圖從一個JSON源獲取特定數據段。我已經聲明瞭一個全局變量並嘗試更新全局變量,但它沒有正確更新。此外,我的調試警報運行順序令人困惑。混淆JavaScript的全局變量範圍和更新
<script>
//global variable
var latestDoorStatus = "initialized value"; //set value for debugging purposes
//debug alert which also calls the function
alert("Alert#1: call getDoorStatus = " + getDoorStatus("***********"));
function getDoorStatus(public_key) {
//get data in json form
var cloud_url = 'https://data.sparkfun.com/output/';
// JSONP request
var jsonData = $.ajax({
url: cloud_url + public_key + '.json',
data: {page: 1},
dataType: 'jsonp',
}).done(function (results) {
var latest = results[0];
//debug alert
alert("Alert #2: latestDoorStatus = " + latestDoorStatus);
//update the global variable
latestDoorStatus = latest.doorstatus;
//debug alert
alert("Alert #3: latestDoorStatus = " + latestDoorStatus);
//return the global variable
return latestDoorStatus;
});
alert("Alert #4: latestDoorStatus = " + latestDoorStatus);
}
</script>
當我在瀏覽器中運行這個,我得到了以下行爲:
首先,我得到警報#4(應該在腳本運行結束)與全局變量的初始化值
然後我得到警報#1爲「不確定」。這應該是調用函數getDoorStatus的結果應該返回latestDoorStatus
的更新值然後我得到警報#2 latestDoorStatus的初始化值,因爲全局變量尚未更新,這是有道理的
然後我得到警報#3的功能應該返回變量latestDoorStatus後警報#3(即在全局變量是否已正確更新),所以我不明白爲什麼警報#latestDoorStatus
的正確值1(這是應該有返回值)回來不確定,爲什麼警報#4這是應該在S的最後運行cript正在運行。
你應該看看(http://stackoverflow.com/questions/14220321/how-do-i-return-the-a-an-asynchronous-call),我想你也有同樣的問題。 – Volune