我们如何在jQuery / php / mySQL中显示最近的通知? 更新

从这里继续提问如何在jQuery / php / mySQL中显示最近的通知?

所以如下面的答案所述。 我在DB中添加了一个neew列。 默认值为0.如果我理解正确,那么我需要在显示通知后立即将seen = 0更改为1,因此它不再循环并向我显示无限量的相同通知。

这就是我现在所拥有的:

function fetch_notification(){ setInterval(function(){ //GET ALL DATA WHERE SEEN=0 $.ajax({ url: "fetchResults.php", success: function(data){ $.each(data.vormid, function(i, vormid) { $("#noti-box").append('
New form filled out by Dr. '+data.vormid[i].arsti_eesnimi+' '+data.vormid[i].arsti_perekonnanimi+'
'); }); update_notification(); }, dataType: "json"}); }, 5000); } fetch_notification(); //UPDATE SEEN=0 to 1 function update_notification(){ console.log("updating"); }

我的两个PHP文件是fetchResults.php和updateResults.php

fetchResults.php:

 prepare("SELECT * FROM ravim WHERE seen =0 ORDER BY date_created DESC"); $stmt4->execute(); $vormid = $stmt4->fetchAll(PDO::FETCH_ASSOC); echo json_encode(array("vormid" => $vormid)); ?> 

updateResults.php:

 prepare("UPDATE ravim SET seen=1 WHERE ravim_id=:ravim_id"); $stmt4->execute(); ?> 

编辑所以我设法只显示一次通知。 我现在的问题是音频,一般来说,如果我写的代码是“好的”或者我应该改变一些东西。 音频:我希望每次收到通知时播放声音,但它会在开始时播放一次。 我尝试添加一个loopcounter,并检查对象是否为空,但它不起作用。 如何处理音频的任何建议或良好实践?

码:

  $.ajaxSetup ({ cache: false }); var loopLimit = 1; var loopCounter = 0; setInterval(function(){ $.getJSON('fetchResults.php', function(data) { $("#loadingDiv").show(); $('#noti-box').empty(); $("#notificationTitle").empty(); if(jQuery.isEmptyObject(data)){ console.log("there is no data"); }else{ console.log(data); if (loopCounter < loopLimit){ var sound = $("#notification")[0]; sound.currentTime = 0; sound.load(); sound.play(); loopCounter++; } $.each(data.vormid, function(i, vormid) { $("#noti-box").append('
New form filled out by Dr. '+data.vormid[i].arsti_eesnimi+' '+data.vormid[i].arsti_perekonnanimi+' at '+data.vormid[i].date_created+'
'); var id= $(".alert.alert-info").val(); $("#notificationTitle").append('
  • New form filled out by Dr. '+data.vormid[i].arsti_eesnimi+' '+data.vormid[i].arsti_perekonnanimi+'
  • '); $(".close").on('click', function () { var ravim_id = $(this).attr('id'); $.ajax({ type: "POST", url:'updateResults.php', data:"ravim_id=" + ravim_id, success:function(data){ console.log("success"); },error: function(data){ console.log("not saved"); } }); }); }); } $("#loadingDiv").fadeOut("slow"); }); }, 5000);

    目前还不完全清楚问题是什么,但是你的代码中有错误:

     $stmt4 = $DB_con->prepare("UPDATE ravim SET seen=1 WHERE ravim_id=:ravim_id"); $stmt4->execute(); 

    您正在使用绑定参数,但您没有绑定它。 您可以通过向execute()方法添加数组或在单独的语句中手动绑定它来解决此问题。

    使用第一个选项:

     $stmt4 = $DB_con->prepare("UPDATE ravim SET seen=1 WHERE ravim_id=:ravim_id"); $stmt4->execute(array( ':ravim_id' => $ravim_id )); 

    请注意,您还可以设置PDO以在遇到问题时抛出exception,因此您应该这样做,以便在有exception时收到通知。