【问题标题】:Check for page refresh or close with jQuery/javascript使用 jQuery/javascript 检查页面刷新或关闭
【发布时间】:2013-12-24 03:00:32
【问题描述】:

我希望检查页面是否已使用 jQuery 或 javascript 刷新或关闭。

我目前有一些数据库值,如果用户导航离开或刷新页面,我想删除这些值。

我正在使用 AJAX 调用来删除这些值。

现在,我有以下代码:

处理程序:

window.beforeunload = cleanUp;

cleanUp() 方法:

function cleanUp() {
    // Check to see if it's an actual page change.
    if(myActualLeave) {
        $.ajax({
            type: "POST",
            url: "/api/cleanup",
            data: { id: myLocalId },
            success: function (data) {
                console.log(myLocalId + " got removed from the database.");
            }
        });
    }

    // Reset the flag, so it can be checked again.
    myActualLeave = true;
}

myActualLeave 是我在进行 AJAX 调用时设置为 false 的标志,因此它们不会触发 beforeunload 处理程序。

我遇到的问题是,当我单击页面上的链接时,例如指向 Google 的链接,window.beforeunload 不会触发。我可能对此有误解,但我也尝试过使用 jQuery 的 $(window).unload(...);onbeforeunload 触发器。

在以下情况下我应该使用什么来调用javascript:

  1. 用户刷新页面,
  2. 当用户离开页面时,或
  3. 用户何时关闭页面?

编辑:它出现在我可以使用click() jQuery 处理程序来检测导航离开的评论中。我应该更具体一点,我并不是说当用户单击链接时才希望它触发。我希望它在他们以任何方式更改页面时触发。因此,例如,如果输入地址栏。

【问题讨论】:

  • 离开你可以在$('a').click()上调用一个函数。或者向所有外部链接添加一个类并在这些链接上调用它。我认为卸载会在刷新和关闭时起作用?
  • 我将编辑我的问题以包括这个,因为我没有,但是当我说导航离开时,我的意思不仅仅是一个链接。就像用户在地址栏中输入内容一样。
  • 我有一个页面,我使用它:window.onbeforeunload,我刚刚检查过,当我输入 URL、单击返回、关闭或单击链接时,它会提示我。它在您的所有要求下触发。
  • 您是否考虑过在 PHP 中使用会话,而不是使用 JavaScript?如果他们的会话处于活动状态,您可能希望使用 JavaScript 设置一个 cookie 并每 10 秒更新一次。这将是解决此问题的更好方法。
  • @Enijar 我对 PHP 会话了解不多,但我对 web.py 会话了解。是不是很像我可以做这样的事情。你有资源可以指点我吗?

标签: javascript jquery ajax


【解决方案1】:

你应该试试“onbeforeunload”:

window.onbeforeunload

但我认为您不能在此回调函数中放置“活动”(ajax 调用)代码。你所能做的就是定义一个确认模式窗口,在离开之前向用户显示:

你确定要离开是因为...

所以你应该像@Leeish 所说的那样:在链接的 .on('click') 中添加一个代码,这样它就可以在发送到另一个页面之前启动 ajax 调用。

但对于“刷新”或“关闭”场景,您可以考虑将数据库行标记为“草稿”(或其他),如果在下一页时未保存,请删除草稿行。

【讨论】:

  • 我刚试过这个,它奏效了。我想我依赖于看到页面上的alert 弹出窗口。谢谢,感谢@Leeish!至于草稿部分,我会研究一下。那会是内置到数据库中的东西吗?还是我的网络框架?我使用 web.py 作为后端。
  • 这取决于您的需要。您可以将临时值存储在会话中,如果数据库更复杂,则可以存储在数据库中
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-03-11
  • 2011-01-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-06-27
相关资源
最近更新 更多