在浏览器开放时只读取一次cookie

时间:2017-02-20 10:30:25

标签: javascript ruby-on-rails ajax cookies rails-geocoder

我正在开发一个应用程序,根据用户浏览我的应用程序的“城市”显示一些结果。我只会使用此位置信息来显示一些结果,仅此而已。我阅读this并在我的应用中实施。

我把这段代码放到我的_header部分:

<%- unless @lat_lng %>
  <script>
    getGeoLocation();
  </script>
<%- end %>

这个代码到application.js:

function getGeoLocation() {
  navigator.geolocation.getCurrentPosition(setGeoCookie);
}

function setGeoCookie(position) {
  var cookie_val = position.coords.latitude + "|" + position.coords.longitude;
  document.cookie = "lat_lng=" + escape(cookie_val);
}

此代码到我的控制器索引操作:

if cookies().key?("lat_lng")
  lat_lng = cookies[:lat_lng].split("|")

  geo_localization = "#{lat_lng[0]},#{lat_lng[1]}"
  query = Geocoder.search(geo_localization).first
  @city = query.state

else
  @city = "nocity"
end

但现在每次加载任何页面时,我都会再次读取cookie。我怎么能:

  • 查看第一页加载时是否存在cookie,
  • 如果存在,请阅读位置
  • 如果没有,请加载没有位置信息的页面内容。
  • 在用户允许位置请求后,创建cookie并找到位置,使用位置数据重新加载页面内容(使用ajax或somethng)
  • 使用相同的位置,直到用户关闭浏览器上的应用页面,而不是每次加载页面时都读取cookie。

顺便说一句,我不熟悉javascript,但试图处理。

1 个答案:

答案 0 :(得分:0)

您应该将已经解释过的cookie的信息添加到cookie本身。再向JavaScript添加一个条件,以便在此后检查此信息。

或者,您可以将此信息放入QueryString Url并从那里读取。

干杯,