使用AJAX显示通知



我的用户面板上有一个导航栏。导航条的一部分指示用户是否有新的未读消息。在这种情况下,徽章将出现在图标旁边。我简化了这里的代码,使它们更容易理解和阅读。

这就是简化的HTML代码:

<div class="btn-group msg-box">
<i class="fa fa-envelope"></i>
// this is the default state, no badge is shown
</div>

这是AJAX请求,它每10秒调用一个自定义函数:

<script type='text/javascript'>
$(document).ready(function(){
setInterval(checkMsg,10000);
});
function checkMsg(){
$.get('ajax.php',{user_id : <?php echo $user_id; ?>},function(data){
$('.msg-box').html(data);
});
}
</script>

这是ajax.php文件的内容:

if(isset($_GET['user_id']){
// a few lines of code here to check if that particular user has any unread message.
// In such case a variable name $newMessage is set to 1. Now ... :
if($newMessage>0){
$data='
<i class="fa fa-envelope"></i>
<span class="badge"><i class="fa fa-info"></i></span>
';
}else{
$data='
<i class="fa fa-envelope"></i>
';
}
echo $data;
}

首先,我知道我写这个AJAX请求的方式是非常新手的,但它无论如何都很好,在某一点上!

如果用户有一条新消息,并且他们停留在一个页面上,代码会完美运行并显示徽章。但是,当用户刷新页面或转到另一个页面时,即使他们有新消息,也会在没有徽章的地方再次显示默认状态。我知道这当然是因为我已经通过HTML代码指定了一个默认状态。

我需要知道如何保持AJAX请求的结果,无论用户刷新页面或转到另一个页面的次数如何。

更新

我尝试将查询结果存储在ajax.php文件中的SESSION中。所以我写的不是$data,而是$_SESSION['data']

回到我的HTML,我做了以下更改:

<div class="btn-group msg-box">
<?php
if(!isset($_SESSION['data'])){
?>
<i class="fa fa-envelope"></i>
<?php
}else{
echo $_SESSION['data'];
}
?> 
</div>

我之所以做出这一改变,是因为我考虑到SESSIONS根据定义是在域内全局创建和访问的。因此,一旦设置好,就可以在所有其他页面上进行检查和使用。因此,只有在未设置SESSION的情况下,才应显示默认状态。但这似乎也没有达到我想要的结果。仍然会发生同样的事情。

好的,现在回答我自己的问题。:(

我的更新似乎是个好主意,我尝试过了。问题是我在我的主PHP文件上写了session_start();,该文件包含在该项目的所有其他PHP文件中。

所以我基本上认为,当调用ajax.php文件时,就不需要再写session_start();了。因为ajax.php是在一个已经有session_start();的php文件中调用的。所以,我错了!

在ajax.php中的代码开头添加session_start();只是解决了这个问题。

最新更新