Отображение уведомления с AJAX - PullRequest
1 голос
/ 25 марта 2020

У меня есть панель навигации на панели моих пользователей. Часть навигационной панели указывает, есть ли у пользователя новое непрочитанное сообщение. В этом случае значок появится рядом со значком. Я упростил здесь коды, чтобы их было легче понять и прочитать.

Итак, это упрощенный код 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 запрос очень ладный ie, но он все равно работает нормально, до одной точки!

В случае, если у пользователя есть новое сообщение, и если они остаются на странице, код выполняется отлично и показывает значок. Но когда пользователь обновляет страницу или переходит на другую страницу, даже если у него есть новое сообщение, это состояние по умолчанию снова отображается там, где нет значка. И я знаю, что это, конечно, потому что я указал состояние по умолчанию с помощью HTML кодов.

Мне нужно знать, как сохранить результат запроса AJAX независимо от того, сколько раз пользователь обновляет страница или переходит на другую страницу.

ОБНОВЛЕНИЕ

Я попытался сохранить результат запроса в СЕССИИ в моем файле ajax. php. Поэтому вместо $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>

Я сделал это изменение, потому что учел тот факт, что СЕССИИ по определению создаются и доступны глобально в домене. Поэтому, как только он установлен, его можно проверить и использовать на всех других страницах. Таким образом, только если эта СЕССИЯ не установлена, должно отображаться состояние по умолчанию. Но и это, похоже, не дает желаемого результата. Все то же самое происходит.

1 Ответ

0 голосов
/ 26 марта 2020

Хорошо, теперь отвечаю на мой вопрос. :)

Моя ОБНОВЛЕНИЕ , похоже, хорошая идея, которую я попробовал. Проблема заключалась в том, что я написал session_start(); в моем основном PHP файле, который был включен во все другие PHP файлы проекта.

Так что я в основном думал, что когда ajax. php файл вызван, нет необходимости снова писать session_start();. Потому что ajax. php был вызван внутри файла PHP, в котором уже было session_start();. Итак, я ошибся!

Добавление session_start(); в начало моего кода в ajax. php просто устранило проблему.

...