【发布时间】:2014-08-20 23:45:56
【问题描述】:
我想从脚本中查询一个值并将该值用作其他函数的变量。尽管设置了值,但此代码返回零。
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);
如果我用零初始化计数器,那么会有一个奇怪的开始动画,它会上下跳跃。如果我能得到实数而不是零,一切都会好起来的。或者我应该完全切换到同步调用?我该怎么做?还是回调是更好的解决方案?
【问题讨论】:
-
total 设置正确,只是在调用 alert(total) 之前没有设置。
-
我编辑了这个问题。获得一个全局变量仍然很好。看来这是不可能的——只有代码重组...
标签: javascript jquery ajax global-variables anonymous-function