如何通过AJAX检测数据库新增记录并触发提示音?
问题:数据库新增记录时的检测条件困惑
我不确定数据库表新增记录时该检测什么条件,希望得到帮助。
数据库记录示例
['Paul Abioro', 'paulexv...@gmail.com', 'chester', 'Teejay', 'Hi Teejay', '3', '2023-04-06 17:42:54'] ['Paul Abioro', 'paulexv...@gmail.com', 'chester', 'Teejay', 'How are you doing?', '3', '2023-04-06 17:42:58']
已编写的AJAX代码
我写了获取数据库记录的AJAX代码,但里面的条件语句不知道该把datum.length和什么值比较:
load_messages = function(){ $.ajax({ url:"json/chat-content.php", method:"POST", data:{recipient_id:query_id}, dataType: "JSON", success:function(resp) { let datum = resp.response; //condition for when the new record is added to the database if(datum.length == ){ let audio = new Audio("assets/audio/mixkit-confirmation-tone-2867.mp3"); audio.play(); } setTimeout(load_messages, 60000); }, error: function (data) { console.log(data); } }); }
解决方案思路
要检测新增记录,核心是对比当前获取的记录数和上一次的记录数,具体实现如下:
- 在函数外部定义全局变量,存储上一次加载的记录总数:
let lastMessageCount = 0;
- 在AJAX的
success回调里,对比当前datum.length和lastMessageCount:- 当
datum.length > lastMessageCount时,说明有新记录添加,触发提示音 - 对比完成后,更新
lastMessageCount为当前的记录数,方便下一次校验
- 当
修改后的完整代码:
let lastMessageCount = 0; // 全局变量存上一次的记录数 load_messages = function(){ $.ajax({ url:"json/chat-content.php", method:"POST", data:{recipient_id:query_id}, dataType: "JSON", success:function(resp) { let datum = resp.response; // 检测是否有新记录 if(datum.length > lastMessageCount){ let audio = new Audio("assets/audio/mixkit-confirmation-tone-2867.mp3"); audio.play(); } // 更新记录数,用于下次对比 lastMessageCount = datum.length; setTimeout(load_messages, 60000); }, error: function (data) { console.log(data); } }); }
- 额外优化方案(更精准):
如果担心旧记录修改导致误触发,可以结合记录的时间戳(示例中最后一项是消息时间)来判断,只检测时间晚于上一次最后一条消息的新内容:
let lastMessageTime = ''; // 存上一次最后一条消息的时间 load_messages = function(){ $.ajax({ url:"json/chat-content.php", method:"POST", data:{recipient_id:query_id}, dataType: "JSON", success:function(resp) { let datum = resp.response; if(datum.length > 0){ // 取最后一条消息的时间字段 const currentLastTime = datum[datum.length - 1][6]; // 对比时间判断是否有新消息 if(currentLastTime > lastMessageTime){ let audio = new Audio("assets/audio/mixkit-confirmation-tone-2867.mp3"); audio.play(); } lastMessageTime = currentLastTime; } setTimeout(load_messages, 60000); }, error: function (data) { console.log(data); } }); }
内容的提问来源于stack exchange,提问作者devsam247
相关产品推荐
相关产品推荐

