我正在制作一个(有点)管理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.)如何做到这一点?
问候。
这是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
中的代码将返回该数字,当请求完成时,您的元素将使用该数字更新。