Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/244.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
我的JavaScript AJAX有什么问题?_Javascript_Php_Jquery_Ajax_Chat - Fatal编程技术网

我的JavaScript AJAX有什么问题?

我的JavaScript AJAX有什么问题?,javascript,php,jquery,ajax,chat,Javascript,Php,Jquery,Ajax,Chat,我正在尝试制作一个简单的聊天系统,当一条新消息存在时,它会加载一条新消息。以前,我只是加载了数据库中的所有消息。当新用户发送消息时,我需要让滚动条滚动到底部 使用这种方法完成了聊天加载,但我无法滚动,因为它会每200毫秒滚动到底部 $(document).ready(function(e) { $.ajaxSetup({cache:false}); setInterval(function() {$('#chatlog').load('logs.php'); var ch

我正在尝试制作一个简单的聊天系统,当一条新消息存在时,它会加载一条新消息。以前,我只是加载了数据库中的所有消息。当新用户发送消息时,我需要让滚动条滚动到底部

使用这种方法完成了聊天加载,但我无法滚动,因为它会每200毫秒滚动到底部

$(document).ready(function(e) {
    $.ajaxSetup({cache:false});
    setInterval(function() {$('#chatlog').load('logs.php');
    var chatReload = document.getElementById("chatlog");  //This is the scrolling part
    chatReload.scrollTop = chatReload.scrollHeight;  ////This is the scrolling part 
    }, 200); //AJAX updates 200ms
});
新的JavaScript代码加载以前的消息。但在刷新页面之前不会加载任何新消息。刷新页面后,消息将全部加载,但不会再次加载任何新消息。为什么这不起作用?谢谢

HTML和JavaScript:

        <div id="tab3">
          <h2>Chat Room</h>

                <div id="c-input_wrap">
                    <div id="chatlog">
                        Loading chat please wait...
                    </div>

                <div id="chatwrap">
                    <div id="chatinput">
                    <form name="chatbox" class="userchat">
                        <input class="userchat" name="message" type="text" autocomplete="off" onkeydown="if (event.keyCode == 13) document.getElementById('chatbutton').click()" autofocus/><br>
                        <input class="userchat" id="chatbutton" name="submitmsg" type="button" onclick="submitChat()" value="Send" />
                    </form>
                    </div>
                </div>
            </div>
        </div>

<script>    
    var form = document.querySelector('form[name="chatbox"]');
    form.addEventListener("submit", function (event) {
        event.preventDefault();
    });

    function submitChat() {
        if(chatbox.message.value == '') {
            alert('Error: Missing Fields.');
            return;
        }
        var message = chatbox.message.value;
        var xmlhttp = new XMLHttpRequest();

        xmlhttp.onreadystatechange = function() {
            if(xmlhttp.readyState==4&&xmlhttp.status==100) {
                document.getElementById('chatlog').innerHTML = xmlhttp.responseText;
            }
        }

        xmlhttp.open('GET','chat.php?message='+message, true);
        xmlhttp.send();
        chatbox.reset();
    }

    $(document).ready(function(e) {
        $.ajax('logs.php', {
            ifModified: true,
            complete: function(jqxhrResponse) {
                $('#chatlog').html(jqxhrResponse.responseText);
                // scroll to the bottom here
                scrollToNewMessage();
            }
        })
    });

    var allowScroll = true;
    $('#chatlog').scroll(function() {
        allowScroll = isNearBottom();
    });

    function isNearBottom() {
        var leeway = 10;
        $(window).scroll(function() {
            return $(window).scrollTop() + $(window).height() > $(document).height() - leeway;
    });
}

function scrollToNewMessage() {
  if (allowScroll) {
    $("#chatlog").animate({ scrollTop: $('#chatlog').prop("scrollHeight")}, 1000);
  }
}
</script>

聊天室
正在加载聊天,请稍候。。。

var form=document.querySelector('form[name=“chatbox”]”); 表单。addEventListener(“提交”,函数(事件){ event.preventDefault(); }); 函数submitChat(){ 如果(chatbox.message.value==''){ 警报('错误:缺少字段'); 返回; } var message=chatbox.message.value; var xmlhttp=new XMLHttpRequest(); xmlhttp.onreadystatechange=函数(){ if(xmlhttp.readyState==4&&xmlhttp.status==100){ document.getElementById('chatlog').innerHTML=xmlhttp.responseText; } } open('GET','chat.php?message='+message,true); xmlhttp.send(); reset(); } $(文档).ready(函数(e){ $.ajax('logs.php'{ 如果修改:正确, 完成:函数(jqxhrResponse){ $('#chatlog').html(jqxhrResponse.responseText); //滚动到底部 scrollToNewMessage(); } }) }); var allowscoll=true; $('#chatlog')。滚动(函数(){ allowScroll=isNearBottom(); }); 函数isNearBottom(){ var-leeway=10; $(窗口)。滚动(函数(){ 返回$(窗口).scrollTop()+$(窗口).height()>$(文档).height()-leeway; }); } 函数scrollToNewMessage(){ 如果(allowScroll){ $(“#chatlog”).animate({scrollTop:$(“#chatlog”).prop(“scrollHeight”)},1000); } }
chat.php:

<?php
    error_reporting(E_ALL & ~E_NOTICE);
    session_start();

    if  (isset($_SESSION['id'])) {
        $userId = $_SESSION['id'];
        $username = $_SESSION['username'];
        $userLabel = $_SESSION['nickname'];
    }

    $connect = mysqli_connect("", "", "", "");
    mysqli_select_db($connect, "root");
    $message = $_REQUEST['message'];
    $date = date('m/d/y');
    $time = date('H:i:s');

    mysqli_query($connect, 
                "INSERT INTO chat (name, message, time, date) 
                 VALUES ('$userLabel', '$message', '$time', '$date')"
                 );

    $result1 = mysqli_query($connect, "SELECT * FROM chat ORDER by id");
    while ($extract = mysqli_fetch_assoc($result1)) {
        echo $extract['name'] . ": " . $extract['message'];
    }
?>

logs.php:

<?php
    error_reporting(E_ALL & ~E_NOTICE);
    session_start();

    if  (isset($_SESSION['id'])) {
        $userId = $_SESSION['id'];
        $username = $_SESSION['username'];
        $userLabel = $_SESSION['nickname'];
    }

    $connect = mysqli_connect("", "", "", "root");
    mysqli_select_db($connect, "root");
    $day = date('m/d/y');
    $result1 = mysqli_query($connect, "SELECT * 
                                       FROM (SELECT * 
                                             FROM chat 
                                             WHERE date = '$day' 
                                             ORDER BY id DESC 
                                             LIMIT 100) x                                      
                                       ORDER BY id ASC
                                       ");

    while ($extract = mysqli_fetch_assoc($result1)) {
            echo "
            <div class='usermessage'>
                <div class='mheader'>
                    <h1 style='color:".$color."'>" . $extract['time'] . "</h1>
                    <h2 style='color:".$color."'>" . $extract['date'] . "</h2>
                    <h3 style='color:".$color."'>" . $extract['name'] . "</h3>
                </div>
                <p>" . $extract['message'] . "</p>
            </div>";
        }
?>

我要做的是在PHP端将消息转换成JSON格式,并为每条消息添加一个id,当您拉入消息时,将last_message_id变量设置为该消息上的最后一个id。这样,您就可以只请求自上一个id以来的新消息


另外,如果用户在那里,您应该只滚动到消息的底部,您可以设置一个变量以保持滚动新消息,但是当用户向上滚动时,将其设置为false,这样它就不会一直向下滚动。

请缩小代码范围并添加导致错误的相关代码…控制台中有错误吗?在PHP中,您的
$date
不是
mysql
日期格式<代码>yyyy-mm-dd。不知道你的代码已经完成了多少;你能详细说明一下你在这个过程中走了多远吗?您还可以使用此代码进行SQL注入..Console检查正常。为什么使用
mysql
date格式很重要?我已经修改了我的问题,使之更具体,我的问题停留在哪里。因为
2015-12-01
!=<代码>2015年1月12日。
date
是数据库中的
date
列吗?