📜  如何在不刷新网页的情况下实时显示数据库中的值?(1)

📅  最后修改于: 2023-12-03 15:38:38.455000             🧑  作者: Mango

如何在不刷新网页的情况下实时显示数据库中的值?

在 Web 开发中,我们经常需要向用户展示实时更新的数据,比如在线聊天数据、股票价格、实时天气等。本文将介绍如何在不刷新网页的情况下实时显示数据库中的值。

技术选型

本文采用以下技术实现实时数据显示:

  • 后端语言: PHP
  • 前端框架: jQuery
  • 数据库: MySQL
  • Web 服务器: Apache
实现步骤
第一步:建立数据库

首先,我们需要建立一个数据库。假设我们要展示的数据是一个简单的计数器。我们需要建立一个名为 counter 的数据库,里面包含名为 value 的一个数值类型的字段。

CREATE DATABASE counter;
USE counter;
CREATE TABLE counter (value int);
INSERT INTO counter VALUES (0);

这个数据库只包含一个名为 counter 的表,里面只有一个名为 value 的字段,初始值为 0。

第二步:编写 PHP 代码

接下来,我们需要编写 PHP 代码来与数据库交互,并将数据实时返回给前端。

<?php

header('Content-Type: text/event-stream');
header('Cache-Control: no-cache');

$dbhost = "localhost";
$dbuser = "username";
$dbpass = "password";
$dbname = "counter";

$mysqli = new mysqli($dbhost, $dbuser, $dbpass, $dbname);

if ($mysqli->connect_error) {
    die('Connect Error (' . $mysqli->connect_errno . ') ' . $mysqli->connect_error);
}

while (1) {
    $result = $mysqli->query("SELECT * FROM counter");
    $row = $result->fetch_assoc();
    $value = $row['value'];
    echo "data: $value\n\n";
    ob_flush();
    flush();
    sleep(1);
}

这段代码采用长轮询方式,使用 SSE(Server-Sent Events)技术向前端推送数据。代码中的 while (1) 循环不断检测数据库变化,如果有变化则将最新的数值发送给前端。

第三步:编写 jQuery 代码

最后,我们需要编写 jQuery 代码从 PHP 文件中接收数据,并实时更新页面。

$(document).ready(function() {
    if(typeof(EventSource) !== "undefined") {
        var source = new EventSource("counter.php");        
        source.onmessage = function(event) {
            $("#counter").html(event.data);
        };
    } else {
        $("#counter").html("Your browser does not support Server-sent events.");
    }
});

这段代码中,我们先判断浏览器是否支持 SSE。如果支持,则使用 EventSource 对象从 PHP 文件中接收数据,并将数据实时更新到页面中。

第四步:显示计数器

最后,我们需要在页面中显示计数器。

<!DOCTYPE html>
<html>
<head>
    <title>Real-time Counter</title>
    <script src="https://code.jquery.com/jquery-3.5.1.min.js"></script>
</head>
<body>
    <h1>Real-time Counter</h1>
    <div id="counter"></div>
    <script src="counter.js"></script>
</body>
</html>

这段代码中,我们将计数器放在一个 div 元素中,并在 body 元素关闭标签前引入 jQuery 和我们编写的 JavaScript 文件。

结语

到这里,我们已经成功地实现了在不刷新网页的情况下实时显示数据库中的值。本文介绍的方法使用 PHP 和 jQuery 技术栈,但其他技术栈也可以实现类似的功能。