1

HTML5のgeolocation.getCurrentPosition関数から変数を取得しようとしています。ただし、変数を関数の外部で定義するのに多くの問題があります。

この関数は、以下のコードを使用して機能します。

<script>
var latitude;
var longitude;
var accuracy;
var altitude;
var altitudeAccuracy;
var heading;
var speed;

if (navigator.geolocation){
  navigator.geolocation.getCurrentPosition(  
    function (position) {
      latitude = position.coords.latitude;
      longitude = position.coords.longitude;
      alert(longitude)
      accuracy = position.coords.accuracy;
      altitudeAccuracy = position.coords.altitudeAccuracy;
      heading = position.coords.heading;
      speed = position.coords.speed;
    }
  );
}

// alert(latitude);

ここにalert(longitude)数値が返されるのがわかります。ただし、その行にコメントを付けてコメントを外すとalert(latitude)、「未定義」のアラートが表示されます。

どんな助けでも大歓迎です!ありがとう。

4

2 に答える 2

4

getCurrentPositionは非同期呼び出しだからです。

取得する値にアクセスする前に、コールバックが起動するのを待つ必要があります。

function nextStep(){
    alert(latitude);
}

navigator.geolocation.getCurrentPosition(  
    function (position) {
      latitude = position.coords.latitude;
      longitude = position.coords.longitude;
      alert(longitude)
      accuracy = position.coords.accuracy;
      altitudeAccuracy = position.coords.altitudeAccuracy;
      heading = position.coords.heading;
      speed = position.coords.speed;
      nextStep();
    }
);
于 2013-01-07T16:17:31.310 に答える
1

getCurrentPositionは非同期呼び出しです

javascriptでは、並行性は「実行から完了」モデルで機能します。つまり、現在の関数のすべてのコードは、次の実行コンテキストに移動する前に完了します。元のコードでは、コードは次の順序で実行されます。

  • 変数の定義
  • getCurrentPositionが初期化されました
  • alert(緯度)
  • スクリプトが完了します

次に、次の実行コンテキストに移動してコールバック関数を実行します。その時点で、変数が設定され、他のアラートが実行されます。変数が最初に設定されていることを確認する場合は、コールバックでアラートを実行する必要があります

于 2013-01-07T16:25:54.583 に答える