【问题标题】:Jquery/javascript detect and capture page refresh events?Jquery/javascript 检测和捕获页面刷新事件?
【发布时间】:2011-03-18 17:46:17
【问题描述】:

我有一个 AJAX 页面,但我也向用户提供了一个查询字符串,以便他/她可以在 url 中输入查询字符串以再次查看同一页面。 (想想谷歌地图及其“共享链接”功能)。

当 AJAX 请求发生时,我会更新呈现给用户的查询字符串,但实际 URL 不会改变。问题是,如果用户刷新页面,所有从 AJAX 创建的 DOM 元素都会消失。

我想要做的是让 javascript 捕获刷新事件,而不是刷新页面,而是将用户重定向到页面和查询字符串。

即如果查询字符串是:?data=blah&stuff=bleh

那么不是将页面刷新回www.example.com,而是将用户引导至www.example.com/?data=blah&stuff=bleh

【问题讨论】:

    标签: javascript jquery ajax refresh


    【解决方案1】:

    您无法更改查询字符串...没有浏览器实际离开页面并获取新页面(有点扼杀 AJAX 的意义)。

    可以去哈希,像这样:www.example.com/#data=blah&stuff=bleh

    在你的脚本中设置window.location.hash,例如:

    window.location.hash = "data=blah$stuff=bleh";
    

    当您的页面加载时,您需要实际使用哈希...例如:使用它作为数据参数来执行您之前进行的相同 AJAX 调用。

    【讨论】:

    • 我实际上是在考虑让页面在页面刷新时实际重定向到查询字符串 url,但在其他情况下保持 URL 不变。但是,您的技术可能是一个更好的解决方案,我会尝试一下!
    • 我试过了,效果很好。然而,我刚刚意识到一个问题。由于散列用于页面内导航,因此在地址栏中输入散列 url 实际上不会导致页面刷新。当 javascript 检测到此更改时,有没有办法强制刷新?
    • @Razor - 我很好奇...如果您想要刷新页面,为什么要使用 AJAX?
    • @Nick,不,我不想在 AJAX 请求发生时刷新页面。我的意思是这个。当 AJAX 请求发生时,页面不刷新,然后将 url 更改为 www.example.com/#data=blah。这部分完美运行。\n 现在假设您的朋友向您发送了一个链接“www.example.com/#data=bloh”。然后你把它放到你的 url 栏中,然后按 enter。如果您已经在 www.example.com 上,您的页面实际上不会转到您朋友的页面,而只会停留在您之前所在的同一页面上,因为哈希不会导致页面刷新。
    • @Razor - 啊,在那种情况下是的,有一个onhashchange 事件......但它不支持跨浏览器。但是...有一个插件可以对其进行规范化,因此它可以在任何地方工作:benalman.com/projects/jquery-hashchange-plugin
    猜你喜欢
    • 2015-03-04
    • 2011-01-27
    • 1970-01-01
    • 2011-12-22
    • 2019-02-12
    • 2011-05-16
    • 2011-04-26
    • 1970-01-01
    • 2018-05-02
    相关资源
    最近更新 更多