我的事件页面显示日期和时间。对于登录的成员(member),我可以获取他们的首选时区。但对于那些未登录的用户,我想首先检测他们的笔记本电脑时区,并以他们的本地时区显示页面。
我在application.html.erb中使用jquery:
<% if session[:time_zone].blank? %>
<script type="text/javascript">
jQuery.ajax({
data: {user_time_zone: $().get_timezone()},
type: 'post',
url: "/set_time_zone_session"
})
</script>
问题:它最后运行 jQuery,因此第一次时,页面显示默认时区。刷新页面后,所有子序列请求时区都得到正确设置。 此外,在第一次使用 javascript 请求后重新加载页面,有更好的方法吗?
额外:如果我必须重新加载页面。我添加 location.reload(); jQuery 调用后。重新加载发生在第一个请求完成后。有没有办法在第一个请求加载之前立即重新加载页面?否则,页面加载两次就会很奇怪。
最佳答案
我建议在客户端设置带有时区的 cookie 然后只需重新加载页面即可。这将使您的 Rails 应用程序保持简单。
(p.s. HTTP 请求可能包含一个“Date” header ,为客户端提供日期+时间。您可以在生成 rubyonrails 输出时使用它,根本不需要 ajax。 http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.18 但更常见的情况是客户端不发送日期 header 。)
关于javascript - 在所有数据加载之前检测时区,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19778123/