2011-10-29 10 views
1

可能性の重複JSON値を使用しようとすると:私は、次のJavaScriptコードを持って
JavaScript asynchronous return value/assignment with jQuery

を、time.phpファイルは、json_encodeを使用して分と時間の出力を持っています関数。私がconsole.logをgetJSON関数の中に移動すると、正しい値が見つけられますが、関数の外に移動すると、未定義として表示されます。

var my_hour; 

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

console.log(my_hour); 
+0

提案された複製は、この質問と重複するものとみなされるほど一般的ではありません。 –

答えて

1

これは非同期です。 $.getJsonによって作られたAjaxリクエストは非同期あなたはそれがそのように動作する場合は、あなたには、いくつかのsetIntervalでconsole.logを置く必要があり、あなたのconsole.log(my_hour).

後に初期化され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); 
});