Я хочу уведомить человека о количестве рабочих мест, доступных в таблице в моей базе данных. В таблице у меня есть список из 8 рабочих мест, и они имеют свою доступность. Я сделал подсчет с помощью запроса PHP с SELECT COUNT(*) AS jobs...
и создал этот сценарий ajax, который показывает количество с интервалом.
$(document).ready(function() {
$.ajaxSetup({ cache: false });
setInterval(function() {
$('#divToRefresh').load('notification.php'); //this contains the query
}, 30000);
});
Тем не менее, я не уверен, как я могу сделать это так, когда пользователь увидит уведомление уведомления, они закроют его, и он не появится снова, пока не появится новое доступное задание.
Я не могу найти ничего хорошего в Google.
Ваша функция jQuery выполняется с интервалом в 30 секунд, опрашивая данные с сервера. notification.php
возвращает предварительно обработанный HTML-код, содержащий (я полагаю, среди прочего) количество доступных рабочих мест.
Проверьте количество доступных рабочих мест и покажите уведомление на основании этого:
setInterval(function() {
var oldNumberOfJobs = newNumberOfJobs = 0;
$('#divToRefresh').load('notification.php'); //this contains the query
newNumberOfJobs = $('#divWithJobsCount').text;
if (newNumberOfJobs > oldNumberOfJobs) {
// show notification to the user
}
oldNumberOfJobs = newNumberOfJobs;
}, 30000);
Чтобы быть более конкретным (показывать / скрывать уведомления), мне нужно увидеть ваш HTML.
Это решение кажется громоздким. Весь предварительно отрендеренный HTML загружается снова и снова. Более хороший подход — возвращать только количество доступных рабочих мест и обновлять это число только с помощью jQuery.
Кроме того, это может быть хорошей идеей, чтобы вернуть последнюю job_id
а также общее количество доступных рабочих мест. Таким образом, вы можете проверить, если последний job_id
который уже сохранен во внешнем интерфейсе, соответствует вновь полученному job_id
, И только если они не совпадают, вы обновите счетчик и отобразите новое уведомление.
Вот это jsfiddle.js который охватывает ваш случай. Счетчик заданий моделируется с текущим количеством минут. Функция каждые 15 секунд проверяет, изменилось ли количество минут. Как только это происходит, отображается предупреждение (но только если старое было закрыто).
setInterval
в jsfiddle написан с использованием фиктивного объекта, чтобы его можно было тестировать в браузере без запросов AJAX. В вашем коде используйте следующую форму:setInterval(function() { $.get('notification.php', checkJobsCounter); // returns jobs count in plain text }, 30000);
Ну, вы должны сделать AJAX
вызов и ответ на него должен быть number of new notifications
, Теперь проверьте, если num>0
тогда просто делай $("#notification").fadeIn();
который по умолчанию скрытый div с текстом У вас есть новое уведомление (или что-то еще) и кнопка закрытия.
$(doument).ready(function(){
setInterval(function(){
$.get("notification.php", function(data){
if(data>0)
{
$("#div").fadeIn();
}
});
},1000);
});
Как только пользователь закроет это, вы можете создать cookie в браузере пользователя, а затем проверить, установлен ли cookie, не делать ajax-запрос. Это было тем, что вам не нужно было обновлять БД, и каждый пользователь сможет видеть уведомление.