2011-07-15 13 views
0

私は関数外のスコープ内でposition.coordsを使用しようとしていますが、グローバルスコープ内の値を移動して関数スコープ外に呼び出すことはできません。私はウィンドウ変数を含む多くのソリューションを試しました。この場合、geolocalisationは、新しいgoogle.maps.LatLng(iplat、iplong)がnullです。誰かが関数getLocationスコープの外にposition.coordsを入れる方法を甘くすることができますか?私の機能の範囲外の変数を設定するには?

function getLocation(position) 
{ 
    window.iplat = parseFloat(position.coords.latitude); 
    window.iplong = parseFloat(position.coords.longitude); 
} 
function errorFunction(position) { 
    alert('Error!'); 
}  
var geocoder; 
var address; 
var userlocation; 
var curloc; 

google.load("maps",'3',{other_params:'sensor=true'}); 
google.setOnLoadCallback(function() 
{ 
    if (google.loader.ClientLocation) 
    { 
     geocoder = new google.maps.Geocoder(); 

     //html5  
     if(navigator.geolocation) {   
      navigator.geolocation.getCurrentPosition(getLocation); 
     } 
     else 
     { 
      curloc = google.loader.ClientLocation; 
      iplat=parseFloat(curloc.latitude); 
      iplong=parseFloat(curloc.longitude);   
     } 
     var latlng = new google.maps.LatLng(iplat, iplong); 
      if (geocoder) { 
      geocoder.geocode({'latLng': latlng},function(results, status) { 
      if (status == google.maps.GeocoderStatus.OK) { 
       if (results[1]){ 
       country_code=results[1]....; 
       } 
      } else { 
       alert("Geocoder failed due to: " + status); 
      } 
      }); 
     } 
     alert(country_code+":"+iplat+"||"+iplong); <--- NULL VALUES 
     } 

}); 
+0

Zlatevが正しい。あなたの問題は「getLocationのスコープ外の変数を設定しています」ではなく、getLocation()より前にその場所を使用しようとするコードが実行されるという事実にあります。 – Nickolay

答えて

1

google apiにはあまり詳しくないので、私の野生の推測では、その時点では存在しない変数を渡しているということです。 navigator.geolocation.getCurrentPositionは、コールバック引数(google.setOnLoadCallbackと同様)を受け入れます。必要なすべての変数がネスト・イベントを後方に表示していることを確認します。

navigator.geolocation.getCurrentPosition(
    function(position){ 
    var iplat = parseFloat(position.coords.latitude), 
     iplong = parseFloat(position.coords.longitude); 

    alert(country_code+":"+iplat+"||"+iplong); //should work now! 
    google.load("maps",'3',{other_params:'sensor=true'}); 
    google.setOnLoadCallback(function() { ... }); // the rest of code 
    } 
); 

希望します。

+0

テスト済みですが、常にこのスコープ外の値を取得するのに問題があります。私のコードは非常に長く、他の人には値をステップする必要があります。私は素敵な別の解決策です。 – user325558

関連する問題