Продолжающийся вопрос отсюда Как мы можем показывать последние уведомления в jQuery / php / mySQL?
Итак, как указано ниже в ответах. Я добавил новую колонку в DB, которую вы видели. Значение по умолчанию равно 0. Если я правильно понимаю, тогда мне нужно будет изменить увиденное = 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(); ?>
EDIT Итак, мне удалось показать уведомление только один раз. Мой вопрос теперь идет со звуком и вообще, если код, который я написал, «хорошо» или мне что-то изменить. Аудио: я хотел бы воспроизводить звук каждый раз, когда приходит уведомление, но он продолжает играть один раз в начале. Я попытался добавить loopcounter и проверить, является ли объект пустым или нет, но он не работает. Любой совет или хорошая практика, как иметь дело с аудио?
Код:
$.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);
Не совсем ясно, в чем проблема, но здесь у вас есть ошибка в вашем коде:
$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, чтобы генерировать исключения, когда он сталкивается с проблемами, поэтому вы должны, вероятно, сделать это, чтобы получить уведомление, когда оно есть.