如何每隔几秒钟在 PHP 中使用打印语句和图像的功能刷新 div



我正在尝试构建一个浏览器纸牌游戏,主要是PHP和其他一些有用的语言,以测试和扩展我的PHP知识,用我一直想做的东西。但是我阅读并尝试实施的每个在线解决方案都不起作用,我不知道为什么。我有这样的逻辑:

//find game form
print "<form method='post' action='game.php'>
<label>Enter host generated game #</label><br>
<label><input type='text' name='gamenumber'></label><br>
<label><input type='submit' name='findgame' value='FindGame'></label><br><br>
</form>";
//host game button
print "<form method='post' action='game.php'>
<label><input type='submit' name='hostgame' value='HostGame'></label>
</form>";
//game logic

if(isset($_POST['hostgame'])) 
{
$roomnumber = rand();
print $roomnumber;
insertField($Ausername,$roomnumber); //insert field GUI
//link game to host for future field printing
$query = "UPDATE game".$roomnumber." SET host='".$Ausername."' WHERE host='null'";
$result = mysqli_query($link, $query);
print "<div id='quote'>"; //populate host just disappears <meta http-equiv='refresh' content='5' />
//populates self and opponents in hosts perspsective
populatehost($roomnumber); 
print "</div>";

}
if(isset($_POST['findgame'])) //this processes after user submits data.
{
$roomnumber = $_POST['gamenumber'];
$_SESSION['gamenumber'] = $_POST['gamenumber'];
//link game to find for future field printing
$query = "UPDATE game".$roomnumber." SET find='".$Ausername."'WHERE find='null'";
$result = mysqli_query($link, $query);
print "<form method='post' action='game.php'>
<label><input type='submit' name='startgame' value='StartGame'></label>
</form>";
//populates self and opponents in finds perspsective
populatefind($roomnumber); 
}

if(isset($_POST['startgame'])) //this processes after user submits data.
{
print "<br>Game started.<br>";
print "heads or tails?nn";
print "<form method='post' action='game.php'>
<label><input type='text' name='headstails'></label><br>
<label><input type='submit' name='select' value='Select'></label><br><br>
</form>";
//finder always starts game
populatefind($_SESSION['gamenumber']);
}
$gameStatus="";
$flip = rand(1,2);
$coin = "heads";
$gameStarted = "game not started";
if($flip==1)
$coin="heads";
else if($flip==2)
$coin="tails";
if(isset($_POST['headstails'])) //this processes after user submits data.
{
if($_POST['headstails']==$coin)
{
print "find game player goes first";
$gameStarted = "game started";
//notify find game player he goes first
//do logic where he goes first
}
else
{
print "host game player goes first";
$gameStarted = "game started";
//notify host game player he goes first
//do logic where he goes first
}
populatefind($_SESSION['gamenumber']);
}

这是我尝试粘贴在页面底部的jquery函数。

?>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.1.1/jquery.min.js%22%3E%3C/script%3E">
jQuery(function () {
var $els = $('div[id^=quote]'),
i = 0,
len = $els.length;
$els.slice(1).hide();
setInterval(function () {
$els.eq(i).fadeOut(function () {
i = (i + 1) % len
$els.eq(i).fadeIn();
})
}, 2500)
})
</script>
</body>
</html>

所以我能够为主持人和发现者打印字段,一旦发现者掷硬币,它就会说谁从他们的角度先走......但我很难让它出现在其他玩家的视角上。我正在考虑通过使用执行所有打印的功能刷新div 来实现这一点,但无论如何似乎都不起作用。我以许多不同的方式尝试了php睡眠方法,我尝试了一些jquery函数,没有任何效果。顺便说一句,填充主机和填充查找只是基于变量数组的巨型表的函数。

你试图实现的这种事情将使用常规的Ajax调用花费服务器的大量资源。

类似问题 : 友情链接

让我们以两个用户之间的聊天为例:

用户的 1 页面有一个 Javascript 计时器,每秒询问新消息:">嘿服务器,给我发送新消息。无论有没有新消息,服务器都将处理请求,搜索新消息以回复">我现在没有消息给你"或"这是你的新消息"。用户 2 相同。

如果两个用户都使聊天页面保持打开状态 10 秒钟,您的服务器将收到 20 个新消息请求,将运行 20 次新消息搜索,并将发送 20 个包含新消息或"无新消息"回复的回复。即使两个用户都没有发送任何内容,也只是保持页面打开。想象一下,如果有 1000 个用户连接到您的聊天室!

在这种情况下,最好的方法是套接字。在同一聊天示例中,用户 1 和用户 2 将继续侦听新消息,而不是每秒询问新消息。当用户 1 发送消息时,服务器将通知用户 2"我有一条新消息要发送给您。"来了。">

如果连接了 1000 个用户,则完全没有问题。服务器会将新消息发送到套接字通道,并将通知所有连接的用户。没有延迟。

在您的特定情况下,将像这样工作:玩家 1 和玩家 2 正在侦听新消息。当玩家1点击卡片时,将触发服务器的命令。服务器将接收并发送套接字通道的消息:"嘿,所有正在等待新牌的人,这里是"然后每个玩家都会收到通知。立即。

使用Javascript计时器的第一种情况的另一个问题是:如果您增加计时器间隔,回复将被延迟传递。

插座的另一个好处是:它独立于技术。PHP、Java、Node 等

GitHub Project for Using WebSocket with php : Link

您可以在此处查看一些套接字演示

这是一个存储库,其中包含我之前尝试 Socket 时运行的一些测试

你可以这样做:

setInterval(function refresh(){
var value = Math.round(Math.random()*100);
$("#target").addClass("hidden");
$("#target").html(value);
$("#target").removeClass("hidden");
}
, 1500);
.hidden {
display: none;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div id="target">
</div>

最新更新