Javascript 在匿名函数中设置全局变量
我想从脚本中查询一个值,并将该值用作进一步函数的变量。尽管设置了值,但此代码返回零Javascript 在匿名函数中设置全局变量,javascript,jquery,ajax,global-variables,anonymous-function,Javascript,Jquery,Ajax,Global Variables,Anonymous Function,我想从脚本中查询一个值,并将该值用作进一步函数的变量。尽管设置了值,但此代码返回零 var total = 0; var jqxhr = $.getJSON("number.php?jsonp=?", function(data) { total = data[0]['Total']; // e.g 1234567 }); alert (total); // gives zero 我了解到问题可能与异步调用有关,并且我的警报是在匿名函数之前执行的。我也尝试过使用某种setter函数,但
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);
如果我用零初始化计数器,那么会有一个奇怪的开始动画,它会上下跳跃。如果我能得到实数而不是零,一切都会很好。或者我应该完全切换到同步呼叫?我该怎么做?还是回调是更好的解决方案?我花了一些时间才理解您的问题。我仍然不确定这是否会有帮助
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']);
}
});
}
如果我是你,我会查看库代码并将奇怪的动画纠正为零开始值。我知道你不怕这么做。Canonical:total设置正确,只是在调用alert(total)之前没有设置。我编辑了这个问题。获得一个全局变量仍然很好。似乎这是不可能的-只有代码重组…用你的代码我得到
TypeError:counter是未定义的
。我使用if(counter==null)
而不是if(counter==undefined)
,现在它可以正常工作了。我查看了一下库,发现update_-odometer()我的代码中的代码>部分导致了奇怪的动画,但我需要它。但当我尝试调试时,错误不会发生。只有当页面加载发生时,数字才会在开始时向错误的方向旋转。