检查页面刷新或使用jQuery / javascript关闭

时间:2013-12-23 18:47:29

标签: javascript jquery ajax

我希望检查页面是否已使用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. 当用户关闭页面时?
  4. 编辑:我在评论中提到我可以使用click() jQuery处理程序来检测导航。我应该更具体地说明我并不是说当用户点击链接然后我想让它进行处理。我希望它以任何方式更改页面时触发。因此,如果输入了地址栏,例如。

1 个答案:

答案 0 :(得分:1)

您应该尝试“onbeforeunload”:

window.onbeforeunload

但我认为你不能在这个回调函数中加入“active”(ajax调用)代码。您所能做的就是定义一个确认模态窗口,该窗口将在离开前显示给用户:

  

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

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

但是对于“刷新”或“关闭”方案,您可以考虑将数据库行标记为“草稿”(或其他),如果在下一页上没有保存,则删除草稿行。