在间隔中运行php片段

时间:2018-03-21 13:42:45

标签: javascript php html chat

我目前正在为聊天应用程序制作一种黑客方式,只是为了真正玩游戏。

会发生什么情况,您允许用户登录或注册,然后他们将被发送到index.php这是一个聊天框。

发送消息后,此消息将存储在数据库中。然后html使用foreach循环在php中加载消息。

所以现在,一旦我发送消息,我就使用AJAX将此消息发送到php文件,该文件处理它并将其发送到数据库。我现在正试图弄清楚如何允许以下代码段在一个时间间隔内运行,以便它可以通过' x'来填充聊天内容。秒。



sendbutton.click(function(e){
        e.preventDefault();

        var message = sendinput.val();

        var data = {
            message: message
        };

        if(message != ''){
            $.ajax({
                type: 'POST',
                data: data,
                url: 'sendmessage.php',
                success: function(data){
                    if(data == "True"){
                        sendinput.val('');

                        // Could do an ajax get request here.
                    }
                },
                
            })
        }
    });

<?php 
        $messages = Database::getInstance()->query('SELECT * FROM message ORDER BY createdAt ASC');

        foreach($messages->results() as $message){
        $owner = Database::getInstance()->get('user', array('ID', '=', $message->ID));
        
        $ownername = $owner->first()->username;

        $toDrop = <<<ETO
        <div class="message">
            <div class="message-name">
                <p>$ownername</p>
            </div>
            <div class="message-content">
                <p>$message->message</p>
                <p class="message-time">$message->createdAt</p>
            </div>
        </div>
        <div class="clear"></div>
ETO;

            print $toDrop;
        }
        
        
?>

<!-- begin snippet: js hide: false console: true babel: false -->
&#13;
&#13;
&#13;

您无法运行此代码段,但我确实认为这可以大致了解我实现或尝试实现的目标。

2 个答案:

答案 0 :(得分:0)

好的,我现在有一个解决方案,甚至不需要获得间隔,但我不确定这是否是正确的方法。

我做了一个AJAX get请求,用来获取该请求的响应来填充div。

$.ajax({
            type: 'POST',
            data: data,
            url: 'sendmessage.php',
            success: function(data){
                if(data == "True"){
                    sendinput.val('');

                    $.ajax({
                        type: 'GET',
                        url: 'todrop.php',
                        success: function(data){
                            $('.messages').html(data);
                        }
                    })
                }
            },

        })

答案 1 :(得分:0)

我理解它的游戏,同时如果你要在一个拥有更多人的网站上测试它,那么它将开始杀死服务器。创建了2个连接,因此池模型(每隔x秒或每个msg ppl发送后检查新的msgs)和db都不适合聊天。

如果您已经希望这样做,我建议您将数据库切换到redis,这要快得多,并且您可以设置存储数据的到期时间,但实际上您可以使用WebSockets或其他更实际的数据时间解决方案 请参阅此https://github.com/Flynsarmy/PHPWebSocket-Chat或只搜索带有websockets的php / js实时聊天。

相关问题