在页面渲染之前运行Javascript和Controller操作

时间:2013-10-30 20:10:19

标签: javascript ruby-on-rails

我有一个简单的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. 然后在视图中显示数据
  4. 我认为我的问题的根源是javascript和控制器事件的​​排序,但我不知道如何解决这个问题。

1 个答案:

答案 0 :(得分:1)

由于javascript在浏览器中运行并且页面在服务器端呈现,因此您需要重新加载整个页面或在showPosition中执行一些ajax更新。否则,坐标总是落后一步:如果你移动到另一个位置,cookie中的坐标将来自最后一个位置,而不是当前位置。