在AJAX回调中使用interval,变量不更新

时间:2016-11-28 13:46:12

标签: jquery ajax asynchronous

我可以使用get_data()内的setInterval功能成功检索数据。但是,当AJAX函数找到新价格时,调用get_data()函数不会返回新价格,而是继续返回第一次迭代时给出的价格(由两个控制台日志行解释)

如果在间隔内调用get_data(),我怎样才能正确更新价格?

// Collect price data into array
var interval = 1000;
var arr = [];

function price() {
    setInterval(function() {
        get_data(function(result) {
            arr.push(result);
            console.log('updated price: ' + arr[0]); // not updated correctly
        });
    }, 1000);

    function get_data(callback) {
        $.ajax({
            url: 'http://' + domain + '/site-options/',
            dataType: 'json',
            cache: fase,
            success: function(data) {
                var price = data['gbp_price'];
                var abs_change = data['gbp_abs_change'];
                var p_change = data['gbp_change'];
                var market_cap = data['gbp_market_cap'];
                var today_max = data['gbp_today_max'];
                var today_min = data['gbp_today_min'];

                var obj = {
                    'price'      : price,
                    'abs_change' : abs_change,
                    'p_change'   : p_change,
                    'market_cap' : market_cap,
                    'max'        : today_max,
                    'min'        : today_min
                };

                console.log('price: ' + price); // updated correctly

                if (callback) 
                    callback(obj);
            }
        });
    }
}
price();

1 个答案:

答案 0 :(得分:3)

将数据推送到数组堆栈时,它将一直到最后。然后,您每次都会记录第一个值,这样您就可以避免使用.push() - 并运行:

console.log( result.price );

或:

console.log('updated price: ' + ( arr.length - 1 ) );