首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何停止跳转来自Ajax.load方法的内容?

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

Stack Overflow用户
提问于 2014-12-04 01:29:25
回答 1查看 576关注 0票数 0

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

代码语言:javascript
复制
<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加载文件的任何文本时,内容都会重新加载,并且看起来像屏幕上的跳转(不是跳转显示,而是行为跳转)。

因此,我的问题是,我如何进行更改,以便来自用户B的新消息可以显示在用户A的屏幕上,或者我应该使用什么技术来代替?

EN

回答 1

Stack Overflow用户

发布于 2014-12-04 02:06:20

不幸的是,我没有一个可以复制粘贴的解决方案。问题的核心似乎是,当用户在窗口中选择文本时,下一次更新将删除他选择的DOM元素,并用一个新元素替换它。

根据您当前的方案,我将执行以下操作:

  1. 更改文本加载方案以返回增量更新,而不是整个对话。您可以通过让它在每组更新中传递回一个时间戳来做到这一点。客户端存储时间戳,并在请求下一次更新时将其传递给服务器。服务器返回一个新的时间戳和任何新的聊天文本。
  2. 更改您的客户端,将每个新添加的内容添加到它自己的div中。这样,您就不会删除用户从DOM中选择的对话部分。

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

代码语言: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);
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27277965

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档