当数据库中的特定数据发生更改时,使用 php 显示通知

show notification with php when a specific data is changed in a database

我想通知某个人我的数据库中 table 中可用的职位数量。在 table 中,我有一个包含 8 个工作的列表,它们都有自己的工作能力。我用 PHP 查询和 SELECT COUNT(*) AS jobs... 完成了计数,并创建了这个 ajax 脚本,它显示了一个间隔的计数。

$(document).ready(function() {
  $.ajaxSetup({ cache: false }); 
    setInterval(function() {
    $('#divToRefresh').load('notification.php'); //this contains the query
    }, 30000); 
    });

但是,我不确定如何做到这一点,所以当用户看到通知警报时,他们会关闭它并且在有新的可用工作之前它不会再次出现。

我也找不到关于好的 google 的任何内容。

那么您需要进行 AJAX 调用,它的响应应该是 number of new notifications。现在检查是否 num>0 然后只做 $("#notification").fadeIn(); 默认情况下隐藏 div 有文本 你有新通知(或其他) 和关闭按钮。

$(doument).ready(function(){
    setInterval(function(){
        $.get("notification.php", function(data){
            if(data>0) 
                {
                $("#div").fadeIn();
                }
        });
    },1000);
});

一旦用户关闭它,您可以在用户的​​浏览器中创建一个 cookie,然后检查是否设置了 cookie 不要发出 ajax 请求,这是您不必更新数据库,每个用户都会能够看到通知。

您的 jQuery 功能是 运行 每 30 秒从服务器轮询一次数据。 notification.php return 预渲染 HTML 包含(我假设除其他事项外)可用的工作数量。

检查可用职位的数量并根据此显示通知:

setInterval(function() {
    var oldNumberOfJobs = newNumberOfJobs = 0;
    $('#divToRefresh').load('notification.php'); //this contains the query
    newNumberOfJobs = $('#divWithJobsCount').text;

    if (newNumberOfJobs > oldNumberOfJobs) {
        // show notification to the user
    }

    oldNumberOfJobs = newNumberOfJobs;

}, 30000);

更具体地说(showing/hiding 通知),我需要查看你的 HTML。

这个解决方案感觉很笨重。整个预渲染 HTML 正在一次又一次地重新加载。更好的方法是仅 return 可用的工作数量,并且仅使用 jQuery.

更新该数量

此外,return 最新的 job_id 以及可用的职位总数可能是个好主意。这样,您可以检查前端已存储的最新 job_id 是否与新收到的 job_id 匹配。只有当它们不匹配时,您才会更新计数器并显示新通知。

更新

Here is a jsfiddle.js 涵盖了您的案例。作业计数器是用当前分钟数模拟的。该函数每 15 秒检查一次分钟数是否已更改。一旦发生,就会显示警报通知(但只有在旧通知已关闭时才会显示)。

setInterval in jsfiddle is written using a mock object so that it is testable in the browser without AJAX requests. In your code use the following form:

setInterval(function() {
   $.get('notification.php', checkJobsCounter); // returns jobs count in plain text
}, 30000);