【问题标题】:How can we show recent notifications in jQuery/php/mySQL? update我们如何在 jQuery/php/mySQL 中显示最近的通知?更新
【发布时间】: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);

【问题讨论】:

    标签: php jquery pdo


    【解决方案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上有很多例子。
    猜你喜欢
    • 2016-07-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多