PHP页面关闭时调用函数

时间:2016-01-15 08:15:33

标签: javascript php html mysql

当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页面时,函数会被调用.... 有任何想法吗? :)

4 个答案:

答案 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。

解决方法

您可以通过应用后续步骤来实现您想要实现的目标:

  1. 创建将在处理浏览器请求时执行Users::isOffline(Users::getUserName())的php文件
  2. 创建javascript处理程序 onbeforeunload ,它会向之前提到的新创建的php文件发送AJAX请求。
  3. 棘手的时刻:onbeforeunload处理程序发送 Ajax请求并非琐碎的方法。为此,请使用下面提供的代码:

    window.onbeforeunload = function() {
        var x = sendUserOfflineAjax();
        return x;
    };
    
    function sendUserOfflineAjax(){
            // Perform sending ajax request
    }