Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/421.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/86.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 通过异步函数传递变量_Javascript_Jquery_Function_Asynchronous - Fatal编程技术网

Javascript 通过异步函数传递变量

Javascript 通过异步函数传递变量,javascript,jquery,function,asynchronous,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

首先,我使用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

为什么这不能像预期的那样工作?
谢谢你的帮助。

我认为@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);
    });
}

剩下的代码是您的:

php代码?当您从响应中设置btcusd时,您的php代码更有可能被破坏。请参见@Tobbe。如果我在getRate()中输出btcusd,一切都会正常