我在页面上有聊天功能。当两个用户互相聊天时,我找不到在用户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屏幕上,或者我应该使用哪种技术?
答案 0 :(得分:1)
遗憾的是,我没有适合您的复制和粘贴解决方案。您的问题的核心似乎是,当用户在窗口中选择文本时,下一次更新将删除他选择的DOM元素,并将其替换为新元素。
鉴于你目前的计划,我会做以下事情:
更改文本加载方案以返回增量更新而不是整个会话。您可以通过使用每个更新集传回时间戳来实现此目的。客户端存储时间戳,并在请求下次更新时将其传递给服务器。服务器以新的时间戳和任何新的聊天文本进行响应。
改变您的客户,在其自己的div中添加聊天的每个新添加内容。这样,您就不会删除用户从DOM中选择的部分会话。
或者,在处理.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);