如何停止跳转来自Ajax.load方法的内容?

时间:2014-12-03 17:29:25

标签: javascript php jquery ajax livechat

我在页面上有聊天功能。当两个用户互相聊天时,我找不到在用户A的聊天窗口上自动加载用户B的新消息的方法。这就是我使用的原因

<script type="text/javascript">

    $(document).ready(function(){

        $("#getBuddieContacts").load("ajax_getContactsList.php");
        $("#getFriendsRequestList").load("ajax_getMessages.php");

    });

    setInterval(function() {$("#getBuddieContacts").load("ajax_getContactsList.php");}, 5000);
    setInterval(function() {$("#getFriendsRequestList").load("ajax_getMessages.php");}, 5000);

</script>

每次加载脚本时,PHP脚本都会返回完整的聊天(从0到最新)。 (我不知道在用户A的聊天屏幕上显示用户B立即发送消息的技巧)。 :(

代码工作正常但是每当我们尝试复制/粘贴或选择来自ajax加载文件的任何文本时,内容都会重新加载并且看起来像是在屏幕上跳跃(不是显示跳跃,而是行为明智)。

所以,我的问题是,如何进行更改,以便用户A的新消息可以显示在用户A屏幕上,或者我应该使用哪种技术?

1 个答案:

答案 0 :(得分:1)

遗憾的是,我没有适合您的复制和粘贴解决方案。您的问题的核心似乎是,当用户在窗口中选择文本时,下一次更新将删除他选择的DOM元素,并将其替换为新元素。

鉴于你目前的计划,我会做以下事情:

  1. 更改文本加载方案以返回增量更新而不是整个会话。您可以通过使用每个更新集传回时间戳来实现此目的。客户端存储时间戳,并在请求下次更新时将其传递给服务器。服务器以新的时间戳和任何新的聊天文本进行响应。

  2. 改变您的客户,在其自己的div中添加聊天的每个新添加内容。这样,您就不会删除用户从DOM中选择的部分会话。

  3. 或者,在处理.php脚本响应的javascript函数中,您可以想象这样做:

    var newConversationText = "new conversation text here - get it from...  however you're getting it now";
    var oldConversationText = $("#div-containing-conversation-text").html();
    
    var diff =newConversationText.substring(oldConversationText.length);
    
    var newDiv = $("<div>" + diff + "</div>");
    
    $("#div-containing-conversation-text").append(newDiv);