试图从Minecraft服务器刷新ping信息 - 可能与否?

时间:2014-08-02 16:39:30

标签: javascript php jquery html

我正在制作用于管理Minecraft服务器的(有点)仪表板。我目前要做的是打印有多少玩家在线(跨所有服务器)并每隔3秒刷新一次。

什么有效 - 显示玩家总数 - 仅一次;刷新(使用jQuery)相应的div也可以工作(经过调试测试)。 什么不起作用 - 当刷新(使用jQuery)并打印PHP函数的值时,它不会刷新函数本身(它只是一遍又一遍地打印相同的东西)。 注意:我没有从客户端和服务器控制台收到任何错误。

以下是代码:

PHP - 获取跨服务器的玩家数量:

function getPlayersTotal() {
    $total = 0;

    foreach (getServers() as $serverInfo) {
        if (isOnline($serverInfo)) {
            $ping = json_decode(file_get_contents('http://api.minetools.eu/ping/' . $serverInfo), true);
            $total += intval($ping['players']['online']);
        }
    }

    return $total;
}

JS - 刷新 - 位于HEAD。

<script>
    $(document).ready(
        function() {
            setInterval(function() {
                var players = <?php print "" . getPlayersTotal() ?>;
                $('#playersPLZ').text(
                        "" + players);
            }, 3000);
        });
</script>

有人可以向我解释一下(1.)是否可以刷新PHP函数的值 - 以及(2.)如何这样做?

问候。

1 个答案:

答案 0 :(得分:0)

这是Ajax的工作。以下是现在正在发生的事情:您的PHP代码将玩家数量直接输出到发送到浏览器的JavaScript中。如果玩家数量是50,那么所有浏览器都会看到:

<script>
    $(document).ready(
        function() {
            setInterval(function() {
                var players = 50;
                $('#playersPLZ').text(
                        "" + players);
            }, 3000);
        });
</script>

因此,每三秒运行一次数字为50的相同功能。浏览器对PHP没有任何了解,它只看到数字50.对于所有浏览器都知道,它与数字50的硬编码相同。

您需要做的是每隔3秒向服务器发送一个请求新号码的请求,因为您的服务器是运行PHP代码的地方。

您需要创建一个新的PHP文件。我称之为num-players.php。该文件应输出玩家数量。你可以沿着这些方向做点什么:

<?php
    // You will need to require the file containing your getPlayersTotal() function
    echo getPlayersTotal();
?>

然后,您的JavaScript可能是这样的:

<script>
    $(document).ready(function() {
        setInterval(function() {
            $.get("num-players.php", function(players) {
                $("#playersPLZ").text(players);
            });
        }, 3000);
    });
</script>

这将每隔3秒向您的服务器发送一个请求,询问新号码。 num-players.php中的代码将返回该数字,当请求完成时,您的元素将使用该数字进行更新。

相关问题