javascript - 如何在某个表获取新行时刷新页面(PHP)?

标签 javascript php jquery mysql ajax

我一直在寻找一些脚本,当它注意到数据库的特定表中有一个新条目时,它会刷新我的页面。所以基本上......脚本会每五秒左右检查一次表,如果它发现任何时间戳大于 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/

相关文章:

javascript - 滚动和 .addClass();问题

javascript - SyntaxHighlighter v3.0.83 源码

javascript - 如何覆盖剑道网格中的创建按钮单击

javascript - 如何包装返回 Promise 的延迟函数,以便外部函数返回实际值而不是 Promise

php - 有哪些方法可以防止在表单中重复发布? (PHP)

php - 确定网页(或文本段落)的上下文/含义

php - .htaccess 表示 PDF URL

jquery - 使用 JSON 时 jQuery 中 if 语句的说明

javascript - 如何模拟返回 promise 的函数并使用确切的参数验证它

jquery - 如何在鼠标悬停时管理垂直下拉菜单?