2011-09-11 24 views
0

このコードは、posが定義された後にいつでも破損した場合に機能し、続行します。しかし、私はそれを正常に実行すると何も表示されません。私は間違って何をしていますか?GoogleマップAPIが壊れても動作しても動作しない、そうでない場合

function initialize() { 

    var pos; 

    if(navigator.geolocation) { 
     navigator.geolocation.getCurrentPosition(function(position) { 

      pos = new google.maps.LatLng(position.coords.latitude, 
              position.coords.longitude); 
     }, function() { 
       handleNoGeolocation(true); 
      }); 
    } 
    else { // Browser doesn't support geolocation 
     handleNoGeolocation(false); 
    } 

    var myOptions = { 
     zoom: 7, 
     center: pos, 
     mapTypeId: google.maps.MapTypeId.ROADMAP 
    }; 

    var map = new google.maps.Map(document.getElementById("map_canvas"), 
             myOptions); 

} 

答えて

1

getCurrentPosition(f, ...)は非同期です。つまり、コールバックfはリクエストの正常終了後にコールされます。しかし、現時点では、関数initialize()のローカル変数posはスコープに含まれなくなりました。

posをグローバルウィンドウのスコープに定義すると、問題を解決できます。これは正常に動作し、posはコールバックによって割り当てられます。ただし、この割り当てがいつ発生するかはわかりません。この問題を処理する最善の方法は、posをコールバックで直接実行することです。テキストフィールドに書き込んだり、データベースに保存してください。

0

多分、API呼び出しに時間がかかり、途切れると、必要なデータを取得するのに少し時間がかかるので、表示できますか?これは単なる推測ですが、何が起こるか見るためにそこに遅れを入れてみることができます。

1

興味深い。エラーが出ていますか?共有することはできますか?また、デバッグにconsole.log()を使用し、try/catchブロックをラップすることもできます。古いブラウザの中にはいくつか問題があるかもしれないと思います。

+0

私は間違いをしておりません。私も最新のSafariを使用しています。 Chromeでの動作が同じです。奇妙な。 – Ferguzz

関連する問題