当用户试图离开页面时,如何执行javascript函数?

当用户试图离开页面时,如何执行javascript函数?,javascript,jquery,function,chat,Javascript,Jquery,Function,Chat,我正在寻找一种自动将用户状态设置为“脱机”的方法,为此我需要执行一个JavaScript函数,除非有更好的想法。当用户试图离开页面时,如何运行函数?我知道有一种方法可以让消息框出现,因此应该有一种方法可以做到这一点。使用unload方法调用ajax方法。请注意重要的async属性,该属性对浏览器说,在关闭窗口之前需要等待HTTP响应(以确保服务器接收到“脱机”状态) 使用unload方法调用ajax方法。请注意重要的async属性,该属性对浏览器说,在关闭窗口之前需要等待HTTP响应(以确保服务

我正在寻找一种自动将用户状态设置为“脱机”的方法,为此我需要执行一个JavaScript函数,除非有更好的想法。当用户试图离开页面时,如何运行函数?我知道有一种方法可以让消息框出现,因此应该有一种方法可以做到这一点。

使用
unload
方法调用
ajax
方法。请注意重要的
async
属性,该属性对浏览器说,在关闭窗口之前需要等待HTTP响应(以确保服务器接收到“脱机”状态)


使用
unload
方法调用
ajax
方法。请注意重要的
async
属性,该属性对浏览器说,在关闭窗口之前需要等待HTTP响应(以确保服务器接收到“脱机”状态)

试着用这个

<body onbeforeunload="return RunOnClose()">
function HandleOnClose() {
    //do your magic here
    return true;
}

函数HandleOnClose(){
//在这里施展你的魔法
返回true;
}
试着用这个

<body onbeforeunload="return RunOnClose()">
function HandleOnClose() {
    //do your magic here
    return true;
}

函数HandleOnClose(){
//在这里施展你的魔法
返回true;
}

当窗口“卸载”时触发以下事件:

在类似的场景中,我将其与onload事件处理程序配对,在DB中有一行跟踪用户上次登录会话。当他们登录/访问网站时,它有一个“输入”日期,我会在onunload事件上设置“最后一次看到”日期时间,但我也在页面的“onload”上清除“最后一次看到”日期时间


因此,当他们最后一次关闭任何页面时,将设置“最后一次看到”日期,并且该日期将持续

当窗口“卸载”时,将触发以下事件:

在类似的场景中,我将其与onload事件处理程序配对,在DB中有一行跟踪用户上次登录会话。当他们登录/访问网站时,它有一个“输入”日期,我会在onunload事件上设置“最后一次看到”日期时间,但我也在页面的“onload”上清除“最后一次看到”日期时间


因此,当他们最后一次关闭任何页面时,“最后一次看到”日期已设置,并且它将持续存在

,但我将推荐@ErickPetru的解决方案。但我将推荐@ErickPetru的解决方案。我不确定我是否会阻止关闭窗口。只发送异步请求并让窗口关闭可能就足够了。然后,在服务器上,您可以对用户被视为“在线”的时间有一个超时。不过,只有我的2美分。那么,当Async设置为false时,它确保服务器恢复了状态,或者反之亦然?这个例子会完全运行PHP脚本然后关闭吗?谢谢你的帮助@JeremyHeiler如何创建超时?@Pete:这取决于您在服务器端使用的内容以及存储会话状态的方式。@Pete,
unload
事件不适用于关联函数,因为浏览器总是在完成请求之前关闭。所以服务器永远不会收到任何东西。因此,该代码只能与
assync:false
一起使用。但是不关心它,这种请求发生得如此之快,以至于你的最终用户从未意识到它(许多网站这样做,而你从未意识到,不是吗?)。我不确定我是否会阻止关闭窗口的行为。只发送异步请求并让窗口关闭可能就足够了。然后,在服务器上,您可以对用户被视为“在线”的时间有一个超时。不过,只有我的2美分。那么,当Async设置为false时,它确保服务器恢复了状态,或者反之亦然?这个例子会完全运行PHP脚本然后关闭吗?谢谢你的帮助@JeremyHeiler如何创建超时?@Pete:这取决于您在服务器端使用的内容以及存储会话状态的方式。@Pete,
unload
事件不适用于关联函数,因为浏览器总是在完成请求之前关闭。所以服务器永远不会收到任何东西。因此,该代码只能与
assync:false
一起使用。但并不在意,这种请求发生得如此之快,以至于最终用户从未意识到(许多网站都这样做,而你却从未意识到,不是吗?)。
window.onbeforeunload