我有一个多站点设置,其中每个站点通过ajax加载它的数据。一切都在工作完美期待一个细节。如果我按下后退按钮,则从浏览器缓存中加载ajax数据,而不是从服务器加载。这是有问题的,因为用户可能导航到第二个页面,改变状态并导航回到他想要查看概览中的改变的上一页面(例如,接受的任务图表现在具有一个被接受的任务,因为他接受了它) )。导航形式页面清除浏览器缓存
最常见的解决方案,我发现被(经由
cache: false
属性jQuery中)将时间戳附加到AJAX 请求。然而,这个 的缺点是它禁用了我不想做的http缓存(statuscode 304)。另外我需要304状态码,而不是 在其他情况下更新我的视图。在用户离开网页时,第二个选择是结合
window.onbeforeunload
和显示 警告消息。这会使浏览器缓存失效,以便完成请求(不添加时间戳),即使按下了后退按钮 。缺点是用户每次从页面导航时都会收到确认对话框 (这非常烦人)。对于 安全原因,我无法通过JavaScript进行确认,如果我没有 显示消息,则缓存不会失效。
是否有更多的技巧来无效broser缓存/确保Ajax请求真正转到服务器?
如果有人不想尝试我们的,这里是onbeforeunload
的示例代码。在您的网络追踪工具(例如Fiddler)中,当用户使用后退按钮导航到页面时,您会认为请求发送到服务器。如果你注意return 'Hello world';
你不会。 (请注意,在这两种情况下,您都会在浏览器调试器网络跟踪器中看到它,但这不代表实际发送到服务器的代表性)。
请阅读我的第一点.... – Stefan 2013-05-07 14:25:27