可能重复:
JavaScript asynchronous return value / assignment with jQuery
我有以下javascript代码,time.php文件使用json_encode函数输出分钟和小时。如果我在getJSON函数中移动console.log,它会找到正确的值,但是当我将它移到函数外面时,它显示为undefined。
var my_hour;
$.getJSON('../scripts/time.php', function(data) {
my_hour = data.hour;
});
console.log(my_hour);
答案 0 :(得分:1)
这是因为它是异步的。 $.getJson
异步调用您的脚本和变量my_hour的Ajax请求在console.log(my_hour).
如果您希望它以这种方式工作,那么您应该将console.log
放在某个setInterval中。
http://www.w3schools.com/jsref/met_win_setinterval.asp
var interval = setInterval(function(){
if (my_hour != undefined){
console.log(my_hour);
clearInterval(interval);
}
}, 200);
但是这不是一个好的做法..,你的代码应该放在回调函数中,如上所述。
答案 1 :(得分:1)
“$ .getJSON”调用是异步的;与服务器的交互需要时间,但浏览器不会等待它完成。因此,函数调用之后的代码会在回调运行前很长时间内立即运行。
答案 2 :(得分:0)
var my_hour;
$.getJSON('../scripts/time.php', function(data) {
my_hour = data.hour;
console.log(my_hour);
});