Отделение дисплея только однажды

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

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

Я знаю, почему, что-то о каждом идентификаторе должно быть уникальным или что-то в отделении. И затем я использовал 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);
}

index.php:

<div class="msg" id="msg" ></div>

message.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");
} 

session.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;
}

Я думаю, что это - все. Надежда можно выручить меня.

8
задан ProgramFOX 16 December 2014 в 18:26
поделиться

3 ответа

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

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

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

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

0
ответ дан 6 December 2019 в 02:24
поделиться

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

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

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

edit:

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

function checkSession(){
     var postFilen = 'msg.php';
     $.post(postFilen, function(data){
          $(".msg").html(data).find(".message2").fadeIn("slow")
          setTimeout(function(checkSession) {
          $('.msg').fadeOut('slow');
          }, 10000);
     });
}
1
ответ дан 6 December 2019 в 02:24
поделиться

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

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

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

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

0
ответ дан 6 December 2019 в 02:24
поделиться
Другие вопросы по тегам:

Похожие вопросы: