试图在$ .getJSON函数之外使用JSON值

时间:2011-10-29 13:01:46

标签: javascript jquery json

  

可能重复:
  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);

3 个答案:

答案 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);
});