我们如何在 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 中显示最近的通知?更新的主要内容,如果未能解决你的问题,请参考以下文章

使用jQuery+PHP+Mysql实现抽奖程序

为啥在 Haskell 中显式推导 Show/Read?

如何在 CoffeeScript 中显式返回对象

如何在 Django 中显式重置模板片段缓存?

如何在 Drupal 的主分类页面中显​​示子术语?

如何在opencv中显式访问mjpeg后端进行视频捕获