我一直在寻找一些脚本,当它注意到数据库的特定表中有一个新条目时,它会刷新我的页面。所以基本上......脚本会每五秒左右检查一次表,如果它发现任何时间戳大于 time() (页面加载时间,显然不是当前时间)的 id 列例如的值(value)。 14,它会刷新页面。
我在网上看了很多次试图解决这个问题,但我似乎没有找到正确的答案。你看,问题是 JavaScript 和 AJAX 对我来说并不是那么熟悉。
抱歉,如果这看起来像一个愚蠢的问题,这对我来说真的很重要。 也欢迎其他答案......比如我怎么能用 cometd 或长套接字来做呢? 因为我 100% 毫 headless 绪。
这是该页面的当前(简化)代码:
if (isset($_GET['view'])) {
$duel_id = mysqli_real_escape_string($query, $_GET['view']);
$result = mysqli_query($query, "SELECT * FROM duels WHERE `id` = '$duel_id' LIMIT 0, 1") or die(mysqli_error($query));
$row = mysqli_fetch_array($result);
if ($row['member_1'] !== $member_id && $row['member_2'] !== $member_id) {
echo '<meta http-equiv="refresh" content="0; url=redirect.php" />';
exit;
} else {
//IRRELEVANT FUNCTIONS
if ($my_turn == false && $row['winner'] == 0) {
//IRRELEVANT FUNCTIONS
} else {
echo '<center><form action="spell.php" method="post"><table style="margin: 20px;">';
//300 LINES OF DYNAMIC FORMS AND INPUTS
echo '</form></center>';
}
}
echo '<center><table style="margin: 20px; margin-top: 40px;">';
$result = mysqli_query($query, "SELECT * FROM duelling WHERE `duel_id` = '$duel_id' ORDER BY `timestamp` DESC") or die(mysqli_error($query));
//THIS IS THE WHILE LOOP WHICH DISPLAYS ALL LOGS ON REFRESH
while ($row = mysqli_fetch_array($result)) {
//$spell, $name, $defence ARE DEFINED HERE, ANOTHER 20 LINES
echo '<tr><td style="padding: 5px; color: #a20d0d; font-family: \'Courier New\', Courier, monospace; text-align: right;">' . date('d.m.y H:i', $row['timestamp']) . '</td><td style="padding: 5px;">' . $name . ' used ' . $spell . '. <span style="font-family: \'Courier New\', Courier, monospace; color: #a20d0d; font-size: 10px;">' . $defence . '</span></td></tr>';
}
echo '</table></center>';
}
最佳答案
使用 setInterval
和 jQuery 的 $.get
setInterval(function(){
$.get( "page.php", function( data ) {
//Write data to div
$( "#result" ).html( data );
});
},5000);
当然,这将涉及您编辑当前脚本以允许 page.php
获取结果,并且显示给客户端的页面有 <div id="result"></div>
你的 page.php
将只需要在表格中显示数据(因为这是您原始帖子建议的首选输出),不需要其他任何内容,因为它会在每个 5000
被调用毫秒; 5 秒。
差点忘了。确保包含 jQuery 库
<script type="text/javascript" src="//ajax.googleapis.com/ajax/libs/jquery/1.10.2/jquery.min.js"></script>
在page.php
,添加一个“从属”以向您提供所需格式的内容。
<?php
//We've connected to the database using mysqli
echo '<center><table style="margin: 20px; margin-top: 40px;">';
$result = mysqli_query($query, "SELECT * FROM duelling WHERE `duel_id` = '$duel_id' ORDER BY `timestamp` DESC");
while ($row = mysqli_fetch_array($result)) {
echo '<tr><td style="padding: 5px; color: #a20d0d; font-family: \'Courier New\', Courier, monospace; text-align: right;">' . date('d.m.y H:i', $row['timestamp']) . '</td><td style="padding: 5px;">' . $name . ' used ' . $spell . '. <span style="font-family: \'Courier New\', Courier, monospace; color: #a20d0d; font-size: 10px;">' . $defence . '</span></td></tr>';
}
echo '</table></center>';
?>
此外,只是一个提示:不使用内联样式可能对您有用,因为如果样式不是全部在一个(或两个)css 文件中,那么稍后更新样式会很麻烦。
p>关于javascript - 如何在某个表获取新行时刷新页面(PHP)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21704829/