我试图在用户关闭浏览器时运行.php脚本

时间:2014-09-30 13:57:08

标签: javascript php jquery

所以即时制作游戏大厅atm,如果用户关闭或刷新浏览器,则想运行.php脚本。
我的问题是,.unload甚至不会触发,但它应该,我基本上在wiki中使用完全相同的东西。我做错了什么?

我的索引:

<script type="text/javascript">

jQuery(document).ready(function ($) {
    $(window).on('beforeunload', function() {
        return "Do you really want to leave this lobby?";
    });

    $(window).unload(function() {
        alert("wat");
        xmlhttp.open("POST","test_ajax.php",true);
        xmlhttp.setRequestHeader("Content-type","application/x-www-form-urlencoded");
        xmlhttp.send("session=test");
    });
});

</script>

我的test_ajax.php:

<?php

$db_name = "test";
$db_username = "root";
$db_password = "";
$db_host = "localhost";

mysql_connect($db_host, $db_username, $db_password) or die ("No connection possible!");
mysql_select_db($db_name) or die ("No database found!");

$v = "Testaccount";
$sql = mysql_query("UPDATE users SET Avatar=1 WHERE Username='$v'");

&GT;

1 个答案:

答案 0 :(得分:1)

IMO唯一的解决方案是每N秒发送一些心跳信号。如果心跳停止 - 用户已关闭浏览器。浏览器关闭没有可靠的JS事件。您可以显示包含onbeforeunload事件的消息,但您没有足够的时间从该回调发送ajax。如果此回调未在1ms左右返回,则页面将关闭。这样做是因为如果用户输入恶意页面并想要关闭它,页面将无法在onbeforeunload回调中运行某些无限循环,以防止用户关闭页面。