当php页面关闭时,有没有办法调用函数? 我正在MySQL数据库中保存在线/离线状态 用我的功能
Users::isOffline(Users::getUserName())
我写作"离线"进入数据库。
现在我想在有人用关闭按钮关闭页面时调用此函数
我试过这个:
<script language="JavaScript" type="text/javascript">
window.onbeforeunload = confirmExit;
function confirmExit()
{
var offline= <?php echo Users::isOffline(Users::getUserName())?>;
}
</script>
但是,当加载php页面时,函数会被调用....
有任何想法吗? :)
答案 0 :(得分:4)
这是因为PHP代码不能在客户端运行 - 您需要使用JS。
function confirmExit(){
//here you send request to your server
}
在服务器端,您接收请求并将用户标记为离线
答案 1 :(得分:2)
你尝试实现的只是使用php和javascript并不容易。 通常,当您想要获得良好的在线/离线状态检查时,您将不得不使用websockets。
有一个名为Pusher的免费订阅服务,我已多次使用它,而且设置起来非常简单。
此外,您还可以阅读如何设置在线/离线: Show the connecting user login status using Websocket and Pusher
答案 2 :(得分:2)
您可以在关闭页面之前将用户的信息发布到另一个php文件。
按钮就像这样:
<button type='button' data-userid='<?php echo Users::isOffline(Users::getUserName())?>'>click1</button>
您可以将用户ID发布到php文件以更新状态。
$('button').click(function(){
var userid = $(this).attr('data-userid';
$.ajax({
type: "POST",
url: "gooffline.php",
data: {userid: userid},
success: function(data)
{
alert("Come back soon!");
}
});
});
Php文件将是这样的:
$userid = $_POST["userid"];
$status = userLoggingOut($userid); //your db update function
if($status){
echo json_encode(array("status"=>"success","message"=>"user info updated"));
}
希望这能解决。
答案 3 :(得分:2)
你不能这样做,因为php可以在后端上执行,你可以通过以下方式获得理想的结果:
<强>优选强>
如果您需要以正确的方式执行此操作,请参阅 @Philip Andersson 回答。 您还可以清楚地了解如何在Create Live Group Tutorial中使用websockets。
解决方法强>
您可以通过应用后续步骤来实现您想要实现的目标:
Users::isOffline(Users::getUserName())
的php文件 棘手的时刻:从onbeforeunload
处理程序发送 Ajax请求并非琐碎的方法。为此,请使用下面提供的代码:
window.onbeforeunload = function() {
var x = sendUserOfflineAjax();
return x;
};
function sendUserOfflineAjax(){
// Perform sending ajax request
}