【问题标题】:Reading a cookie only 1 time at the browser opening在浏览器打开时仅读取 1 次 cookie
【发布时间】:2017-07-09 14:09:07
【问题描述】:

我正在开发一个应用程序,它会根据用户浏览我的应用程序的“城市”显示一些结果。我只会使用这个位置信息来显示一些结果,仅此而已。我阅读了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,但正在尝试处理。

【问题讨论】:

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


    【解决方案1】:

    您可能应该将 cookie 已被解释的信息添加到 cookie 本身。在您的 JavaScript 中再添加一个条件来检查此信息。

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

    干杯,

    【讨论】:

      猜你喜欢
      • 2016-06-02
      • 2015-01-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-04-14
      • 2014-12-02
      • 1970-01-01
      • 2014-08-06
      相关资源
      最近更新 更多