如果新消息触发javascript,则AJAX调用消息数据库


AJAX call to messages database if new message fire javascript

我要做的是检测是否有任何新消息添加到mysql数据库中的对话。如果有,我想使用JavaScript滚动到页面底部的最后一条消息。

$(document).ready(function() {
var prevdata;
var interval = setInterval(function() {
    $.ajax({
        url: 'inc/aj_chat.php',
        success: function(data) {
            $('#messages').html(data);
            afterdata = data;
        }           
    });
    setTimeout(function() {
        alert(prevdata);
        if (prevdata != afterdata) {
            // Scroll Down function
        }
        prevdata = afterdata;
        },1);
}, 3000);
});

正如你所看到的,我有一个setInterval循环每3000ms刷新一次,我试图将前一个循环中的变量传递到下一个循环中以比较它们。首先,这是实现这一目标的最佳方式吗?其次,如果是的话,我该如何做到这一点?

我会这样做:

$.ajax({
    url: 'inc/aj_chat.php',
    success: function(data) {
        $('#messages').html(data);
        if($(window).scrollTop() + $(window).height() > $(document).height() - 50) {
            window.scrollTo(0,document.body.scrollHeight);
        }
    }           
});

每次滚动条距离底部小于等于50像素时,它就会将滚动条发送到底部。如果不是,它将保持滚动条不变。您可以将数字50调整为您想要的任意像素数。

所以这将确保你的聊天系统自动滚动,只有当用户没有在以前的消息中搜索。