【问题标题】:Set global variable within anonymous function在匿名函数中设置全局变量
【发布时间】: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


【解决方案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']);
        }
    });
}

如果我是你,我会查看库代码并纠正零起始值的奇怪动画。我知道你并不害怕这样做。

【讨论】:

  • 用你的代码我得到TypeError: counter is undefined。我使用if (counter === undefined) 而不是if (counter === null),现在它按预期工作。我查看了库,发现代码中的 update_odometer(); 部分导致了奇怪的动画,但我需要它。但是当我尝试调试时,错误不会发生。只有当页面加载发生时,数字才会在开始时以错误的方向旋转。
猜你喜欢
  • 2021-02-14
  • 1970-01-01
  • 2016-03-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多