我想查詢腳本中的值,並將該值用作變量以獲取更多功能。儘管設置了值,該代碼仍會返回零。在匿名函數中設置全局變量
var total = 0;
var jqxhr = $.getJSON("number.php?jsonp=?", function(data) {
total = data[0]['Total']; // e.g 1234567
});
alert (total); // gives zero
我讀到問題可能是異步調用,並且我的警報是在匿名函數之前執行的。我也嘗試使用某種setter函數,但取得了成功。
如何設置全局變量total
?
編輯:
我現在試圖用延遲對象/承諾。在我初始化計數器之前,我仍然有問題需要AJAX調用的值。我無法在done
部分創建計數器對象,因爲我以後不能更改計數器的值(仍然沒有全局變量)。目前我有這個:
var counter = $('.counter').jOdometer({
counterStart: '0',
numbersImage: '/img/jodometer-numbers-24pt.png',
widthNumber: 32,
heightNumber: 54,
spaceNumbers: 0,
offsetRight:-10,
speed:10000,
delayTime: 300,
maxDigits: 10,
});
function update_odometer() {
var jqxhr = $.getJSON("/number.php?jsonp=?")
.done(function(data){
console.log(data);
total = data['Total'];
counter.goToNumber(total);
})
.fail(function(data){
console.log(data);
});
};
update_odometer();
setInterval(update_odometer, 60000);
如果我用零初始化計數器,那麼會出現一個奇怪的開始動畫,它會上下跳動。如果我能得到真正的數字而不是零,一切都會正常工作。還是應該完全切換到同步呼叫?我會怎麼做?或者回調是更好的解決方案?
Canonical:http://stackoverflow.com/questions/23667086/why-is-my-variable-undefined-after-i-modify-it-inside-of-a-function-asynchron – Abhitalks
total正在設置正確,它只是在alert(total)被調用之前沒有設置。 – psantiago
我編輯了這個問題。獲得全局變量仍然很好。看來,這是不可能的 - 只有代碼重組... – grabner