2012-02-03 6 views
0

私はユーザーのジオロケーションを取得するためにjavascriptを使用しようとしています。その情報をjavascriptコードの別のセクションのパラメーターとして使用できますが、スコープを取得できません。ジオロケーション関数のJavaScript可変スコープ

これは私のコードです。成功関数内の警告をうまく動作しますが、私は関数の外のどこでもvar latにアクセスしようとすると、私は未定義の値を取得します。これを修正するにはどうすればいいですか?

あなたはあなたのコードは次のように仕事をしたい
var lat; var long; 
function success(position) { 
lat = position.coords.latitude; 
long = position.coords.longitude; 
alert(lat); 
} 

function error(msg) { 

} 

if (navigator.geolocation) { 
    navigator.geolocation.getCurrentPosition(success, error); 

} else { 
    error('not supported'); 
} 
+0

** async **の素晴らしい世界へようこそ!あなたはそれをすることはできません。 – SLaks

+0

私はあなたが 'success()'の外で 'lat'を参照しようとしているところは見ません。 – gilly3

+0

@ gilly3 - if else文の後にそれを持っていて、それをsuccess関数の中に移動しました。成功関数の中でのみ動作します。私は、値にアクセスしようとする前に値が返されるまで待つ方法を探していると思います – bsod99

答えて

1

navigator.geolocation.getCurrentPosition(success, error); 
alert("Your position is " + lat + ", " + long + "."); 
// do some more stuff with lat and long 

しかし、success()はまだ呼び出されていないので、latはまだ定義されていません。 これはあなたの成功のハンドラのためのものです。ロケーションを取得した後に実行する必要があるすべてのコードは、成功ハンドラに入ります。これは動作します:

navigator.geolocation.getCurrentPosition(function (position) { 
    success(position); 
    alert("Your position is " + lat + ", " + long + "."); 
    // do some more stuff with lat and long 
}, error);