Отображать div только один раз

поэтому я хочу выглядеть как stackoverflow с сообщением наверху.

теперь у меня все настроено и такое, но у меня одна проблема.. Сообщение отображается только 1-й раз, во второй раз оно не отображается.

Я знаю, почему, что-то о каждом id должно быть уникальным или что-то в div.. И тогда я использовал rand(1, 300); (php), и он все равно не будет работать.

вот мой коды:

function checkSession(){
    $.ajax({url: "session.php", success: function(data){
         if( data == 1){
            var postFilen = 'msg.php';
            $.post(postFilen, function(data){
            $(".msg").html(data).find(".message2").fadeIn("slow")
            setTimeout(function(checkSession) {
    $('.msg').fadeOut('slow');
}, 10000);
            });  
         }else{ 
             $('.message2').hide();
         }
    }});
// setInterval('checkSession()',1000);
}
.на PHP:
<div class="msg" id="msg" ></div>

msg.на PHP:

<div class="message2" id="message2" onclick="closeNotice2()" style="display: none">
Yo, <b><? echo $pusername; ?></b> - <? echo $_SESSION["user_message"]; ?> 
<a class="close-notify" onclick="closeNotice2()">X</a>
</div> 

CloseNotice2 () - (на всякий случай, если вы тоже хотите это увидеть):

function closeNotice2() {
    $(".message2").fadeOut("slow");
} 

сессии.на PHP:

if(isset($_SESSION['user_message'])) {
echo 1; 
}

CSS:

.message2 {
  position: absolute;
  top: 0;
  left: 0;
  z-index: 105; /* Anything higher than 1 will do */
    background-color: #034678; 
    font-family: Arial,Helvetica,sans-serif;
    font-size: 100%;
    text-align: center;
    font-weight: bold;
    border-bottom: 2px solid #FFF;
  height: 26 px;
  width: 100%;
}
.message2 span {
    text-align: center;
    width: 95%;
    float:left;
}

думаю, это все. Надеюсь, вы сможете мне помочь.

3 ответов


вы запрашиваете сессии.php, и если переменная сеанса не была установлена, появится сообщение. если переменная сеанса была установлена, сообщение не появится.

предположительно ваша переменная сеанса "user_message" будет установлена где-то после первого вызова страницы, так что сообщение не будет показано снова. я не мог найти такой код.

ваш javascript находит сообщение div-container по имени класса " msg " / "message2" - это поведение не изменяется, когда изменение идентификатора этого div с случайных чисел. чего вы хотите достичь, используя эти случайные числа? вы хотите, чтобы msg-контейнер отображался более одного раза?

изменить:

сначала попробуйте использовать следующий код. сообщение теперь отображается каждый раз?

function checkSession(){
     var postFilen = 'msg.php';
     $.post(postFilen, function(data){
          $(".msg").html(data).find(".message2").fadeIn("slow")
          setTimeout(function(checkSession) {
          $('.msg').fadeOut('slow');
          }, 10000);
     });
}

проблема не кажется ошибкой в коде, который вы опубликовали. Я думаю, переменная $_SESSION['user_message'] изменено в какой-то момент (т. е. удалено или установлено значение null, false или zero). Вы are установка его значения в какой-то момент в конце концов, иначе это не приведет к isset() возвращает true, в первую очередь.

вероятно, намного проще отладить эту проблему, проверив фактическую связь между вашим браузером и вашим сервером, т. е. используя Палий или просто добавив alert(data) прямо в начале обратного вызова JS.

если вы не получаете никаких предупреждений, когда сообщение не отображается, проблема заключается в вашем JS (т. е. вызов AJAX не срабатывает, не возвращается или код вокруг него никогда не достигается). Если вы получаете предупреждение с чем-то, кроме 1 проблема в ответе сервера (если у вас есть display_errors включено, это, вероятно, будет какое-то сообщение об ошибке, если она действительно разбита).

Я надеюсь, вы знаете, что ваш .msg div автоматически исчезает из-за обратного вызова в вашем обработчике AJAX, будь то .message2 выцвело еще или нет. Unhiding .message2 не вернуть его как .msg скрыт (хотя это не объясняет, почему div не появляется на другой странице, загруженной нажатием ссылки, вводом URL-адреса или принудительной перезагрузкой). Это может быть проблемой, если вы загружаете все содержимое через AJAX и не имеете никаких "реальных" URL-адресов.


наконец, я сам обнаружил ошибку, и это была функция timeout() внутри checksession(); .. Теперь он работает как шарм:)

Мне просто нужно было удалить это:

setTimeout(function() {
    $('.msg').fadeOut('slow');
        }, 5000);

Я не знаю, как это исправить, но я задам другой вопрос, потому что я нахожу этот ответ сейчас! Но спасибо henchman и Алан, что нашли время, чтобы попытаться ответить мне