我们如何在 jQuery/php/mySQL 中显示最近的通知?更新
Posted
技术标签:
【中文标题】我们如何在 jQuery/php/mySQL 中显示最近的通知?更新【英文标题】:How can we show recent notifications in jQuery/php/mySQL? update 【发布时间】:2016-07-07 16:06:55 【问题描述】:从这里继续提问How can we show recent notifications in jQuery/php/mysql?
如下面的答案所述。我在 DB 中添加了一个名为 see 的新列。默认值为 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('<div class="alert alert-info "><button data-dismiss="alert" class="close close-sm" type="button"><i class="fa fa-times"></i></button>New form filled out by Dr. '+data.vormid[i].arsti_eesnimi+' '+data.vormid[i].arsti_perekonnanimi+'</div>');
);
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:
<?php
header('Content-Type: application/json');
include_once '../dbconfig.php';
$stmt4 = $DB_con->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:
<?php
header('Content-Type: application/json');
include_once '../dbconfig.php';
$ravim_id = $_POST['ravim_id'] ;
$stmt4 = $DB_con->prepare("UPDATE ravim SET seen=1 WHERE ravim_id=:ravim_id");
$stmt4->execute();
?>
编辑 所以我设法只显示一次通知。我的问题现在伴随着音频,一般来说,如果我写的代码是“好的”或者我应该改变什么。 音频:我想在每次收到通知时播放声音,但一开始就一直播放一次。我尝试添加一个循环计数器,并检查对象是否为空,但它不起作用。关于如何处理音频有什么建议或好的做法吗?
代码:
$.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('<div class="alert alert-info"><button id='+data.vormid[i].ravim_id+' data-dismiss="alert" class="close close-sm" type="button"><i class="fa fa-times"></i></button>New form filled out by Dr. <b>'+data.vormid[i].arsti_eesnimi+' '+data.vormid[i].arsti_perekonnanimi+' </b> at '+data.vormid[i].date_created+'</div>');
var id= $(".alert.alert-info").val();
$("#notificationTitle").append('<li style="font-size: 14px; padding: 0; margin: 0 0 10px 10px; color: #666666;" >New form filled out by Dr. '+data.vormid[i].arsti_eesnimi+' '+data.vormid[i].arsti_perekonnanimi+'</li>');
$(".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);
【问题讨论】:
【参考方案1】:目前尚不完全清楚问题出在哪里,但您的代码中有一个错误:
$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 设置为在遇到问题时抛出异常,因此您可能应该这样做,以便在出现异常时得到通知。
【讨论】:
我的问题是,我怎样才能从成功调用中将看到的值更新为 1,这样它就不会再次显示相同的通知。 如果你能帮助我,我会很高兴 @raqulka 您需要从添加调用更新函数的 javascript 开始。我们无法看到您何时以及如何执行此操作,但该函数本身与您用于获取结果的函数相似。 好的。所以如果我是正确的,那么我需要将通知的 ID 传递给更新函数,对吗?这就是我卡住的地方。 @raqulka 您只需在 ajax 调用中添加一个data
键,该键的值就是一个对象,其中包含您要发送到 php 脚本的键值对。 SO上有很多例子。以上是关于我们如何在 jQuery/php/mySQL 中显示最近的通知?更新的主要内容,如果未能解决你的问题,请参考以下文章