Veritabanında alarm adlı bir tablom var. Veritabanından sadece veri çekebiliyorum. Yani başka bir müdahale şansım yok daha doğrusu var da yapmamamı istiyorlar diyebilirim. Alarmların bulunduğu sayfaya girdiğimdeki tarihi ve saati session olarak atıyorum. Eğer kullanıcı sistemde login olduysa ve alarm sayfasına hiç girmediyse bir önceki çıkış yaptığı saati alıyorum ve session a atıyorum. Buraya kadar bir sıkıntı yok. Bu session da tuttuğum zaman bilgisinden sonra oluşmuş bir kayıt varsa anlık bildirim vermek istedim. Fakat kodda şöyle bir durum var sürekli notification.php dosyasını kontrol ettiği için aynı alarmın uyarısını bana sürekli veriyor. Buna nasıl bir çözüm bulabilirim?
Yapmak istediğim olay,
Çektiğim veri bir kez görünsün tekrar tekrar bildirim vermesin. Ama alarm sayfasını ziyaret etmediyse de sayfayı kendisi yenilerse yeniden alarm bildirimini göstersin istiyorum. Ajax kodlarım aşağıdaki gibi.
<script type="text/javascript">
repeatAjax();
function repeatAjax(){
jQuery.ajax({
type: "POST",
url: 'notification.php',
dataType: 'json',
success: function(message) {
var msg = "<a href='alarms.php' class='notif'><span class='icon-fire'></span>"+message.msg+"</a>";
jQuery.jGrowl(msg, { header: ""+message.state+"", bgColor: "bg"+message.bgColor+"" });
},
complete: function() {
setTimeout(repeatAjax,1000); //After completion of request, time to redo it after a second
}
});
}
</script>
bir tane global temp değişken oluşturun.
<script type="text/javascript">
oldmessage = '';
repeatAjax();
function repeatAjax(){
jQuery.ajax({
type: "POST",
url: 'notification.php',
dataType: 'json',
success: function(message) {
if (oldmessage!=message.msg) {
oldmessage = message.msg;
var msg = "<a href='alarms.php' class='notif'><span class='icon-fire'></span>"+message.msg+"</a>";
jQuery.jGrowl(msg, { header: ""+message.state+"", bgColor: "bg"+message.bgColor+"" });
}
},
complete: function() {
setTimeout(repeatAjax,1000); //After completion of request, time to redo it after a second
}
});
}
</script>