2014-06-30 97 views
0

我想查詢腳本中的值,並將該值用作變量以獲取更多功能。儘管設置了值,該代碼仍會返回零。在匿名函數中設置全局變量

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); 

如果我用零初始化計數器,那麼會出現一個奇怪的開始動畫,它會上下跳動。如果我能得到真正的數字而不是零,一切都會正常工作。還是應該完全切換到同步呼叫?我會怎麼做?或者回調是更好的解決方案?

+1

Canonical:http://stackoverflow.com/questions/23667086/why-is-my-variable-undefined-after-i-modify-it-inside-of-a-function-asynchron – Abhitalks

+0

total正在設置正確,它只是在alert(total)被調用之前沒有設置。 – psantiago

+0

我編輯了這個問題。獲得全局變量仍然很好。看來,這是不可能的 - 只有代碼重組... – grabner

回答

1

花了我一段時間瞭解你的問題。但我不確定這是否會有所幫助。

var counter = null; 
function update_odometer() { 
    var xhr = $.getJSON("/number.php?jsonp=?").done(function(data) { 
     if (counter === null) { 
      var counter = $('.counter').jOdometer({ 
      counterStart: data['Total'], 
      numbersImage: '/img/jodometer-numbers-24pt.png', 
      widthNumber: 32, 
      heightNumber: 54, 
      spaceNumbers: 0, 
      offsetRight:-10, 
      speed:10000, 
      delayTime: 300, 
      maxDigits: 10, 
      }); 
     } else { 
      counter.goToNumber(data['Total']); 
     } 
    }); 
} 

如果我是你,我會查看庫代碼並糾正奇怪的動畫零開始值。我知道你不害怕這樣做。

+0

隨着你的代碼,我得到了'TypeError:counter is undefined'。而不是'if(counter === null)'我使用'if(counter === undefined)'現在它按預期工作。我看了看庫,發現代碼中的'update_odometer();'部分導致了奇怪的動畫,但我需要它。但是,當我嘗試調試錯誤不會發生。只有當頁面加載發生時,數字纔會在開始時以錯誤的方向旋轉。 – grabner