2011-01-22 7 views
0

私はgeopluginから位置を取得する小さなスクリプトを持っています...私はグローバルに宣言した変数に返されたコーディネートを格納したいのですが...何らかの理由でコールバックが読み込まれませんそれ。コールバックにグローバル変数を使用させるにはどうすればよいですか?グローバル変数を使用しないjqueryコールバック

if(navigator.geolocation) { 
    navigator.geolocation.getCurrentPosition(function(position) { 
     myLocation = new google.maps.LatLng(position.coords.latitude,position.coords.longitude); 
    }, function() { 
     noLocation(); 
    },{timeout: 20}); 
} 
else if (google.gears) { 
    var geo = google.gears.factory.create('beta.geolocation'); 
    geo.getCurrentPosition(function(position) { 
     myLocation = new google.maps.LatLng(position.latitude,position.longitude); 
    }, function() { 
     noLocation(); 
    }); 
} 
else { 
    noLocation(); 
} 
function noLocation() { 
$.getJSON("http://www.geoplugin.net/json.gp?id=117.201.92.17&jsoncallback=?", 
    function(data) { 
     if (data != "" && data.geoplugin_latitude != "") 
      myLocation = new google.maps.LatLng(data.geoplugin_latitude, data.geoplugin_longitude) 
     else 
      myLocation = new google.maps.LatLng() 
    }); 

}

私はそのための非同期呼び出しの...私は問題で、いくつかの方法を得ることができると思い何らかの理由で?

+0

どの変数あなたが話していると、あなたは「それはそれを読んでいないだろう」とはどういう意味ですか? – casablanca

答えて

2

グローバル変数「myLocation」に格納されているようです。ただし、実際に値が設定される前に値を読み取ろうとしている可能性があります。非同期呼び出しが動作する方法は、即座に返され、将来はいつか、要求が応答を受け取ったときにコールバック関数を呼び出すことです。残りのコードは引き続き実行されます。

は、それが取り込まれているかどうかを確認するためにmyLocationに割り当てた後に「警告」を試してみてください。

myLocation = new google.maps.LatLng(data.geoplugin_latitude, data.geoplugin_longitude) 
alert(myLocation) 
+0

この地図は表示されていませんが、地図は表示されません。setCenterが既に実行されているため、マップAPIが何を表示するかわからない... – Amit

+0

Amit - Google Maps API "グローバル変数を使用しないjqueryコールバック"コールバックは実際にグローバル変数を使用しています。 – Zach

関連する問題