2011-10-29 39 views
1

可能重複:
JavaScript asynchronous return value/assignment with jQuery

我有以下的javascript代碼,該time.php文件有使用json_encode分鐘和小時輸出功能。如果我在getJSON函數內移動console.log,它會找到正確的值,但是當我將它移動到函數之外時,它顯示爲未定義。

var my_hour; 

$.getJSON('../scripts/time.php', function(data) { 
    my_hour = data.hour; 
}); 

console.log(my_hour); 
+0

建議的重複不夠通用,被視爲與此問題重複。 –

回答

1

這是因爲它是異步的。通過$.getJson提出Ajax請求的異步調用你的console.log(my_hour).

如果你想讓它工作的方式,那麼你應該把console.log一些的setInterval後,你的腳本和變量my_hour被初始化。

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

「$ .getJSON」調用是異步的;與服務器的交互需要時間,但瀏覽器不會等待它完成。因此,您的代碼之後,函數調用立即運行,很長一段時間在回調運行之前。

0
var my_hour; 

$.getJSON('../scripts/time.php', function(data) { 
    my_hour = data.hour; 
    console.log(my_hour); 
});