【问题标题】:AJAX call to messages database if new message fire javascript如果新消息触发 javascript,则 AJAX 调用消息数据库
【发布时间】:2015-06-02 09:57:30
【问题描述】:

我正在尝试做的是检测是否有任何新消息添加到 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 循环每 3000 毫秒刷新一次,并且我试图将前一个循环中的变量传递到下一个循环中以进行比较。首先,这是实现这一目标的最佳方法,其次,如果它是我该怎么做?

【问题讨论】:

  • 我认为最好的方法是使用 websockets...
  • 我同意@JeroenBellemans。 Websockets 是聊天系统的更好选择。至于你的问题:如果滚动已经在底部,我会自动向下滚动。如果您尝试搜索较旧的消息并且每次出现新消息时都会弹出滚动条,这可能会非常烦人。
  • 好的,假设我使用 ajax 作为后备技术,实现我想要的效果的最佳方法是什么?

标签: javascript php jquery mysql ajax


【解决方案1】:

我会这样做:

$.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 调整为您想要的任意像素数。

因此,这将确保您的聊天系统仅在用户未在以前的消息中搜索时自动滚动。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-03-28
    • 1970-01-01
    • 2014-06-09
    相关资源
    最近更新 更多