我们如何在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时收到通知。