У меня есть панель навигации на панели моих пользователей. Часть навигационной панели указывает, есть ли у пользователя новое непрочитанное сообщение. В этом случае значок появится рядом со значком. Я упростил здесь коды, чтобы их было легче понять и прочитать.
Итак, это упрощенный код 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>
Я сделал это изменение, потому что учел тот факт, что СЕССИИ по определению создаются и доступны глобально в домене. Поэтому, как только он установлен, его можно проверить и использовать на всех других страницах. Таким образом, только если эта СЕССИЯ не установлена, должно отображаться состояние по умолчанию. Но и это, похоже, не дает желаемого результата. Все то же самое происходит.