Javascript 通过异步函数传递变量
首先,我使用JQuery。看一看: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
$(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,一切都会正常