在用户查看页面时如何更新页面?

时间:2018-08-06 14:26:51

标签: php mysql sql ajax websocket

我有一个数据库,其中包含一个特定值,例如yes,因此,如果管理员将该值更改为no,则如果有用户查看该页面,则元素将被更改。 / p>

因此,如果我在该页面中有此文本,并且值为yes,则文本为:

<p id="change">Yes, This text will be changed if the DB value is changed.</p>

如果该值为no,则文本为:

<p id="change">No, This text will be changed if the DB value is changed.</p>

我正在使用PHP和MYSQL,可以编写SQL语句以及Ajax请求。

我已经多次使用Ajax,但是内容已针对特定的访问者或管理员(如果他执行了操作)进行了更改。

但是我不知道更改其他用户的内容,即该DB值更改时。

2 个答案:

答案 0 :(得分:1)

您可以使用AJAX每隔x秒检查一次数据库并相应地更新结果。

使用AJAX将GET或POST请求发送到您网站的路径,该路径在查询数据库后将返回yes或no,因此您可以使用JS更新p元素的内容。

我建议使用内存缓存或类似的数据库缓存,因为每隔几秒钟直接查询一次数据库效率不高,并且如果同时连接多个客户端,则会降低服务器的性能。

Ajax请求前端GET请求

$.ajax({
        url: "/ajax/backendprocessor.php?id_of_value=1",
        type: "get",
        success: function (response) {
               //check the response and update the element            

        }
    });

对于backendprocessor.php,从$ _GET变量获取id_of_value,然后查询数据库/缓存服务器并返回YES或NO

因此,每15秒钟运行一次代码,您就可以在jQuery中完成

setInterval(getUpdate, 15000);

和getUpdate函数将包含ajax代码。

答案 1 :(得分:1)

在您的情况下,客户端是浏览器,必须知道dB值的变化。有两种方法

  1. 客户端定期(可能每X秒)向服务器发送ajax请求以检查DB值,如果更改,则更新UI。会有X秒的延迟。如果db值不经常更改,可能还会浪费资源。

    var getDbValue = function(){

    $.get("server.php", function(data, status){
        //update the UI
        setTimeout(getDbValue, 5000);
    });
    

    };

    setTimeout(getDbValue,5000);

  2. 通过WebSocket的
  3. MQTT。客户端订阅消息队列主题,当值更新时,服务器将消息发布到该主题。客户将近实时地收到更新。

这是一个大话题,将需要更多的服务器设置。也有云消息队列服务,例如AmazomMQ。如果您了解这个概念,就很容易进行配置。

var client = new MQTTClient(options);

client.connect(options);
client.on('connected', function(){
    client.subscribe("your_topic");
  });
client.on('messageArrived', function(msg){
    //the message will contain the db value published from the server
    //update UI
});