Показывать div только один раз - PullRequest
8 голосов
/ 03 марта 2010

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

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

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

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

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

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

Ответы [ 3 ]

1 голос
/ 03 марта 2010

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

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

ваш javascript находит div-контейнер сообщений по className "msg" / "message2" - это поведение не изменяется при изменении id этого 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);
     });
}
0 голосов
/ 07 марта 2010

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

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

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

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

0 голосов
/ 07 марта 2010

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

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...