• 09-04-2015, 10:12:01
    #1
    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>
  • 09-04-2015, 10:18:45
    #2
    Alarm tablo yapısını yazar mısın ?

    Bide notification.php

    PM olarak ta gonderebilirsin.
  • 09-04-2015, 10:57:11
    #3
    Erturk adlı üyeden alıntı: mesajı görüntüle
    Alarm tablo yapısını yazar mısın ?

    Bide notification.php

    PM olarak ta gonderebilirsin.
    İstediğiniz bilgileri pm ile gönderdim.
  • 09-04-2015, 20:27:07
    #4
    ylv
    Üyeliği durduruldu
    loc adlı üyeden alıntı: mesajı görüntüle
    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>
  • 10-04-2015, 11:49:30
    #5
    ylv adlı üyeden alıntı: mesajı görüntüle
    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>
    Teşekkürler. Şu şekilde çözdüm. Birinin işine yarar belki.

    jQuery(document).ready(function() {
        var oldmessage = new Array();
        var repeatAjax = function () {
            jQuery.ajax({
                type: "POST",
                url: 'notification.php',
                dataType: 'json',
                success: function(message) {       
                    if (message == null) { return; }         
                    for(var i = 0; i < message.length; i++){
                        var time = message[i].tmTime;
                        var timeSplit = time.split(/[- :.]/);
                        var timeId = "";
                        for(var j=0;j<timeSplit.length;j++){ timeId += timeSplit[j]; }
                            if (jQuery.inArray(timeId, oldmessage) == -1) {
                                oldmessage.push(timeId);
                                var msg = "<a href='alarms.php' class='notif'><span class='icon-fire'></span>"+message[i].msg+"</a><br />"+message[i].tmTime+"";
                                jQuery.jGrowl(msg, { header: ""+message[i].state+"", bgColor: "bg"+message[i].bgColor+"" });
                            }
                        }
                    },
                    complete: function() {
                    setTimeout(repeatAjax,1000); 
                }
            });
        }
        repeatAjax();
    });
  • 10-04-2015, 15:32:16
    #6
    SQL sorgusunda değişiklik yaptın mı loc ? Sadece jquery ile mi çözdün. Ben dün akşam bakamadım.
  • 10-04-2015, 16:03:15
    #7
    Erturk adlı üyeden alıntı: mesajı görüntüle
    SQL sorgusunda değişiklik yaptın mı loc ? Sadece jquery ile mi çözdün. Ben dün akşam bakamadım.
    Hayır herhangi bir değişiklik yapmadım. jQuery değişiklikleri yeterli oldu.