显示 AJAX 的通知

Showing notification with AJAX

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

所以这是简化的 HTML 代码:

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

这是每 10 秒调用一次自定义函数的 AJAX 请求:

<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 中。所以我写了 $_SESSION['data'].

而不是 $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>

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

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

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

所以我基本认为调用ajax.php文件的时候,不用再写session_start();了。因为 ajax.php 是在 PHP 文件中调用的,该文件中已经有 session_start();。所以,我错了!

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