1

サイトに到着したときにユーザーの位置を特定する単純な Rails アプリがあります (このコードは、私の application.html.erb ファイルの head タグにあります)。

<script>
  var x=document.getElementById("demo");
  function getLocation()
    {
    if (navigator.geolocation)
      {
      navigator.geolocation.getCurrentPosition(showPosition);
      }
    else{x.innerHTML="Geolocation is not supported by this browser.";}
    }
  function showPosition(position)
    {
    var lat = position.coords.latitude;
    var log = position.coords.longitude;
    document.cookie = "cl=" + lat + "&" + log + ";";
    }
  getLocation()
</script>
<p id="demo"></p>

座標は Cookie として保存されます。これらの座標に基づいて、コントローラーの DB から特定のデータ セットを取得するために使用されます。これらの結果はビューに表示されます。

現在、ユーザーが最初にサイトに到着したとき、ページは空白です。ページが更新されると、位置情報がコントローラーを通過し、適切なデータが表示されます。

私がやろうとしているのは、地理位置情報とコントローラーのアクションが最初のページの読み込みで完了するようにすることです。そのため、ユーザーが最初にサイトに到着したときにデータが表示されます。またはもっと簡単に:

  1. ユーザーの位置の座標を取得する
  2. コントローラーに座標を渡し、データを取得する
  3. 次に、ビューにデータを表示します

私の問題の根本は、javascript とコントローラーのイベントの順序にある​​と思いますが、これを修正する方法がわかりません。

4

1 に答える 1

1

JavaScript はブラウザで実行され、ページはサーバー側でレンダリングされるため、ページ全体をリロードするか、showPosition. そうしないと、座標は常に 1 ステップ遅れます。別の場所に移動すると、Cookie の座標は現在の場所ではなく、最後の場所から取得されます。

于 2013-10-30T20:24:10.750 に答える