我有一个可以显示通知的系统。
每14秒钟,jquery将发送一个ajax请求,以根据上次用户活动(上次用户打开页面的时间)检查新消息。
如果有通知,我将页面标题更改为(1) page title
。
它工作正常,但仅适用于1个标签。 我想在所有打开的标签中显示(1)。
jquery:
$(document).ready(function(){
var i = "0";
setInterval(function() {
$.ajax({
url: '/js/alerts.php',
dataType: 'json',
type: 'POST',
success: function(data){
if( data.number > "0" ) {
i = parseInt(i) + parseInt(data.number);
document.title = document.title.replace(/\(\d+\)\s+/, "");
document.title='('+i+')' + " " + document.title;
}
},
});
}, 14000);
});
这将检查是否有通知,如果有,请更改页面标题。
php和mysql:(alerts.php)
$p_opendate = $_SESSION["page_open_date"]; // get last page open date
mysql
select count(c.user) as logs from chat c
where c.message_to = 'user' and c.data > $p_opendate
if($num>0) // $number of new messages
$_SESSION["page_open_date"] = date ("ymdHis"); //update session
我在实际项目中使用准备好的语句。
此选择将在打开页面后(或在检索到的最后数据> 0之后)返回新消息的数量。
问题是如果用户打开了许多浏览器选项卡,我想在所有标题中显示(1),而不仅仅是其中一个。有什么想法吗?
这可以在php,mysql或jquery中解决吗?
答案 0 :(得分:2)
setInterval()函数仅可用于一页吗?如果是,请将其设置为全局函数,以便所有打开的页面都可以进行相同的调用并更新标题。
如果它是SPA,即使用户已经打开了许多选项卡,则setInterval()函数将在所有页面中可用。因此,您无需执行其他任何操作。 setInterval()函数将在指定时间在所有页面中触发。