0

所以我一直在聊天,在 14:09 它工作正常,它显示消息,接收它们并将它们存储在 DB 中。它还显示存储的消息并立即向用户显示消息。然而突然它只是停止显示所有的消息。我已经检查并且消息在发送时存储在数据库中。我不知道错误是什么,因为我没有更改代码来影响它。如果你能帮我解决这个问题,那将有很大帮助!:)

index.php(包括 AJAX 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>

喊叫.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(具有从 DB 检索消息的循环的文件)

<?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/>';  
}

?>
4

1 回答 1

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 } ?>
});
于 2013-09-05T14:42:18.227 回答