2013-09-05 5 views
0

Так что я делаю чат, и в 14:09 он работал нормально, он отображал сообщения, получал их и хранил их в БД. Он также отображал сохраненные сообщения и мгновенно показывал пользователям сообщения. Однако внезапно он просто перестает показывать все сообщения. Я проверил и сообщения хранятся в БД при отправке. Я не знаю, что такое ошибка, поскольку я не изменил код, чтобы повлиять на него. Это очень помогло бы, если бы вы могли помочь мне в этом! :)Код AJAX перестает работать внезапно

index.php (включает в себя АЯКС JQuery & форма)

   <div id="messageSend"> 
       <form action="shout.php" method="post" id="chat"> 
       <textarea rows="8" cols="74" id="Message" name="Message" placeholder="Post messages here."></textarea> 
       <br/><input type="submit" id="submit" value="Shout!"> 
       </form> 

        <script> 
         $('#chat').submit(function(e) { 
          e.preventDefault(); 
           var form = $('#chat'), 
           url = form.attr('action'), 
           Message = $('#Message'); 
           $.post(url, {Message : Message.val()}, function(data) { 
           $('#messageDisplay').html(data); 
           $('#Message').empty().val('');          

         }); 
                setInterval(function() { 
           // Do something every 2 seconds 

         { 
          $.get("data.php").done(function(data) { 
          $('#messageDisplay').html(data); 
            }); 
           } 
          }, 1000); 
         }); 

        </script> 

shout.php (отправить сообщение и добавляет к БД)

<?php 

include 'auth.login.php'; 
include 'pdo.config.php'; 

if (!isset($_SESSION['Username'])) { 
echo '<br/>'; 
echo '<center>You need to login to post!<br/>'; 
header("Refresh:2; URL=index.php"); 
exit(); 
} 

if (!isset($_POST['Message']) || empty($_POST['Message'])) { 
echo '<br/>'; 
echo '<center>Message box empty!<br/>'; 
exit(); 

} 

$Username = $_SESSION['Username']; 

$Message = htmlspecialchars(trim($_POST['Message'])); 

$insertMessage = $PDO->prepare("INSERT INTO `chatbox` (User, Message) VALUES (?, ?)"); 
$insertMessage->bindParam(1, $Username, PDO::PARAM_STR); 
$insertMessage->bindParam(2, $Message, PDO::PARAM_STR); 
$insertMessage->execute(); 


?> 

data.php (файл, который имеет цикл для получение сообщений от БД)

<?php 

include 'pdo.config.php'; 

$chat = $PDO->query("SELECT * FROM `chatbox`"); 

while($getRow = $chat->fetch(PDO::FETCH_ASSOC)) { 
    echo '['.date('d/m/Y g:i:s A', strtotime($getRow['SentOn'])).'] '.$getRow['User'].': '.stripslashes($getRow['Message']).'<br/>'; 
} 

?> 
+1

Что консоль сказать? – tymeJV

+0

Где вы создаете переменную '$ _SESSION ['Username']'? Может, в этом и проблема. Сессии обычно длится некоторое время, а затем они отбрасываются. –

+0

@tymeJV, На моем локальном сервере он работает нормально, он захватывает данные из файла data.php и отображает его. В Интернете это не так. В conolse один мой локальный сервер он забирает data.php онлайн, это не так. –

ответ

0

Ваша страница data.php не вызывается. Содержание следующие:

[05/09/2013 10:37:31 AM] Тест: тест [05/09/2013 10:37:44 AM] Тест: тест

Таким образом, они правильно вставлен; однако, когда пользователь нажимает «Shout», он не вызывает setInterval().

Редактировать: Ваша проблема в том, что после входа в систему setInterval() не вызывается. Если вы обновите страницу после входа в систему, она будет работать (работает для меня).

Попробуйте это:

$(document).ready(function() { 
    $('#chat').submit(function(e) { 
     e.preventDefault(); 
     var form = $('#chat'); 
     url = form.attr('action'); 
     Message = $('#Message'); 
     $.post(url, {Message : Message.val()}, function(data) { 
      $('#messageDisplay').html(data); 
      $('#Message').empty().val('');          
     }); 

     setInterval(function() { 
     // Do something every 2 seconds 
      $.get("data.php").done(function(data) { 
       $('#messageDisplay').html(data); 
      }); 
     }, 1000); 
    }); 

    <?php if (isset($_SESSION['Username'])) { ?> 
     setInterval(function() { 
     // Do something every 2 seconds 
      $.get("data.php").done(function(data) { 
       $('#messageDisplay').html(data); 
      }); 
     }, 1000); 
    <?php } ?> 
}); 
+0

См. мое обновление. Он работает для меня после обновления страницы после входа в систему. – user1477388

+0

Как происходит, когда я обновляю ее, все не так просто? –

+0

Я не знаю, что вы имеете в виду. Когда вы обновляете, оно будет показывать сообщения только тем, кто вошел в систему. Разве это не то, что вы хотите? – user1477388

Смежные вопросы