jquery — показывать уведомление с php при изменении определенных данных в базе данных

Я хочу уведомить человека о количестве рабочих мест, доступных в таблице в моей базе данных. В таблице у меня есть список из 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.

1

Решение

Ваша функция 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);
1

Другие решения

Ну, вы должны сделать 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-запрос. Это было тем, что вам не нужно было обновлять БД, и каждый пользователь сможет видеть уведомление.

0

По вопросам рекламы [email protected]