通过异步函数传递变量

时间:2014-06-19 23:12:24

标签: javascript jquery function asynchronous

首先,我使用的是JQuery。看看:

$(document).ready(function() {
    var btcusd = 600;

    function getRate() {
        $.get("rate.php", function(data) {
            var btcArr = JSON.parse(data, true);
            btcusd = btcArr["last"];
            //This will give me the correct value
            console.log(btcusd);
        });
    }

    setInterval(function() {

        //This will say 600 every time
        console.log(btcusd);

        //Update rate for next loop
        getRate();

    }, 3000);
});

Chrome控制台每3秒钟给我600个。如果我在chrome live控制台中手动执行此操作,我将获得一个真正的值,如595.32。

为什么这不符合预期? 谢谢你的帮助。

1 个答案:

答案 0 :(得分:0)

我认为@Tobbe非常重要。您可以做的一件事就是添加console.log( btcArr )之类的内容,这样可以告诉您是否有任何回报。

我设置了一个不太相似的演示,一旦ajax回调成功更新了值,它就永远不会回到600,这表明在回调中确实会改变值,并且新值在ajax之外可用回调。

我使用的ajax代码是:

function getRate() {
    var gafa = "https://ajax.googleapis.com/ajax/services/feed/load?v=1.0&num=100&q=";
    var url = gafa + encodeURI('http://news.yahoo.com/rss/sports/')+"&callback=?";
    $.getJSON(url, function(data) {
        //var btcArr = JSON.parse(data, true);
        var xData = data.responseData.feed.entries
        //btcusd = btcArr["last"];
        btcusd = xData.length;;
        //This will give me the correct value
        console.log(btcusd);
    });
}

其余代码是您的:WORKING JSFIDDLE DEMO