在页面呈现之前运行Javascript和控制器操作

在页面呈现之前运行Javascript和控制器操作,javascript,ruby-on-rails,Javascript,Ruby On Rails,我有一个简单的rails应用程序,可以在用户到达站点时对其进行地理定位(此代码位于my application.html.erb文件的head标记中): var x=document.getElementById(“演示”); 函数getLocation() { if(导航器.地理位置) { navigator.geolocation.getCurrentPosition(showPosition); } else{x.innerHTML=“此浏览器不支持地理位置。”;} } 功能显示位置(位

我有一个简单的rails应用程序,可以在用户到达站点时对其进行地理定位(此代码位于my application.html.erb文件的head标记中):


var x=document.getElementById(“演示”);
函数getLocation()
{
if(导航器.地理位置)
{
navigator.geolocation.getCurrentPosition(showPosition);
}
else{x.innerHTML=“此浏览器不支持地理位置。”;}
}
功能显示位置(位置)
{
var lat=位置坐标纬度;
var log=position.coords.longitude;
document.cookie=“cl=“+lat+”&“+log+”;”;
}
getLocation()

坐标保存为cookies。基于这些坐标,它们用于从控制器中的数据库检索特定的数据集。然后,这些结果将显示在视图中

当前,当用户第一次到达站点时,页面为空白,当页面刷新时,位置信息通过控制器,并显示相应的数据

我试图做的是在初始页面加载时完成地理位置和控制器操作,以便在用户第一次到达站点时显示数据。或者更简单地说:

  • 获取用户位置的坐标
  • 将坐标传递给控制器并检索数据
  • 然后在视图中显示数据

  • 我认为我的问题的根源在于javascript和控制器事件的顺序,但我不确定如何解决这个问题

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

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

    <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>