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

标签 php jquery mysql ajax notifications

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

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

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

我也无法在好的 ol google 上找到任何内容。

最佳答案

您的 jQuery 函数每 30 秒运行一次,从服务器轮询数据。 notification.php 返回预呈现的 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);

更具体地说(显示/隐藏通知),我需要查看您的 HTML。

这个解决方案感觉很笨重。整个预渲染的 HTML 被一次又一次地重新加载。更好的方法是只返回可用的作业数量,并且只使用 jQuery 更新该数量。

此外,返回最新的 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);

关于php - 当数据库中的特定数据发生更改时使用 php 显示通知,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28465254/

相关文章:

php - 从 PHP 中的输入表单获取日期

php - 比较具有相同列的两个表的相似值

javascript - 使div的内容向下滚动并溢出

jquery - 自动完成结果显示在页面左上方,而不是 spring mvc 中输入的底部

PHP Time() 在 MySQL 中的存储

java - 通过Thread关闭MySQL连接

php - 在 PHP 中测试变量是否为数字的正确方法是什么?

php - 如何在mysql中更改没有秒的时间戳格式

javascript - 如何在 Vue.js 中为类设置方法

php - 如何从表中选择特定行进行编辑或删除