这可能很简单,但它让我很难过。我试图将javascript中的变量返回到函数范围之外的另一个变量。出于某种原因,分配没有发生。这是我的代码:
var time = Math.round(((new Date()).getTime())/1000);
// first call to get data
var power_now = get_data(<%= @user.id %>, time);
function get_data(user_id, timestamp){
var targetURL = "get/user_data?time_now="+timestamp+"&user_id="+user_id;
var power = 0;
$.get(targetURL, function(data){
power = data[0]['power'];
alert(power);
})
return power;
}
$('body').html('<h1>'+power_now+','+power_then+'</h1>')
如果我在.get函数中放置警报(电源),则值是正确的;但是,如果我将它放在.get函数之外,则值为0.
也许我在javascript中缺少一些关于作用域的东西?
谢谢!
答案 0 :(得分:4)
get
是.ajax
的同义词,其中设置了一些特定参数。 AJAX中的第一个A是异步的。这意味着代码不会立即执行,它会发送请求并继续运行。因此,在返回语句之后才会分配该变量。
相反,您应该将代码移动到回调中:
$.get(targetURL, function(data){
power = data[0]['power'];
$('body').html('<h1>'+power_now+','+power_then+'</h1>')
})
答案 1 :(得分:2)
$.get
是一个aysc AJAX调用,意味着该函数甚至会在服务器响应之前返回0。
您需要使用回调函数来设置power_now
或调用相应的代码。
如果代码适用,您可以修改下面的代码,
var power_now = 0;
get_data(<%= @user.id %>, time);
function get_data(user_id, timestamp){
var targetURL = "get/user_data?time_now="+time+"&user_id="+<%= @user.id %>;
$.get(targetURL, function(data){
power_now = data[0]['power'];
$('body').html('<h1>'+power_now+','+power_then+'</h1>')
})
}
答案 2 :(得分:2)
$.get
是一个异步的ajax调用。您需要在成功函数中指定结果操作。
var time = Math.round(((new Date()).getTime())/1000);
// first call to get data
var power_now = get_data(<%= @user.id %>, time);
function get_data(user_id, timestamp){
var targetURL = "get/user_data?time_now="+time+"&user_id="+<%= @user.id %>;
var power = 0;
$.get(targetURL, function(data){
power = data[0]['power'];
alert(power);
})
.success(function() { $('body').html('<h1>'+power+','+power_then+'</h1>') })
}