我的Rails 3应用程序中的许多页面都是由小部件组成的。例如,有一个带url / users / 12的用户页面调用用户控制器show动作。此页面加载Feed小部件,该小部件对feed控制器进行ajax调用,以便获取用户的所有feed项。
因此,假设用户执行以下操作:
1)进入浏览器http://mydomain.com/users/12
2)点击“今天的帖子”按钮,查看今天的帖子(这会触发对返回帖子的Feed控制器的ajax调用
处理浏览器历史记录和后退按钮的推荐方法是什么?
我想我需要做的是存储足够的状态信息,以便当用户点击后退按钮时,浏览器会加载用户/ 12页面,然后再次点击今天的过滤器按钮。实现这个的最佳方法是什么?
我可以存储一个指向要调用的函数的指针:
History.pushState({"function_name": "restoreUserHomePage"}, "", /users/12/feed?time=today);
不好主意?好主意?
注册stateChanged(HTML5中的popState)事件的“正确”方式是什么。可能我的每个页面都有一组不同的小部件。
感谢您的帮助。
答案 0 :(得分:1)
问题实际上是您的浏览器正在缓存xhr请求。因此,当您按下后退按钮时,它会加载.js格式,而不是您浏览器时的完整网址。
以下是我修复它的方法:
#in application_controller
before_filter :set_cache_buster
def set_cache_buster
if request.xhr?
response.headers["Cache-Control"] = "no-cache, no-store, max-age=0, must-revalidate"
response.headers["Pragma"] = "no-cache"
response.headers["Expires"] = "Fri, 01 Jan 1990 00:00:00 GMT"
end
end