Javascript 如何避免自动加载清除用户正在写入的文本?

Javascript 如何避免自动加载清除用户正在写入的文本?,javascript,jquery,ajax,Javascript,Jquery,Ajax,我尝试构建一个类似于Twitter的消息源。我使用AJAX每10秒更新一次提要。我的问题是,到目前为止,自动更新功能会在每次重新加载时更新整个提要。在用户开始写回复之前,这没关系。下一次自动更新开始时,文本将消失 你知道如何预防这种情况吗 这就是我自动加载页面的方式 function autoUpdate(div, url) { $(div).load(url).fadeIn(200); } $(document).ready(function() { $.aja

我尝试构建一个类似于Twitter的消息源。我使用AJAX每10秒更新一次提要。我的问题是,到目前为止,自动更新功能会在每次重新加载时更新整个提要。在用户开始写回复之前,这没关系。下一次自动更新开始时,文本将消失

你知道如何预防这种情况吗

这就是我自动加载页面的方式

function autoUpdate(div, url) {     
    $(div).load(url).fadeIn(200);  
}
$(document).ready(function()  {
    $.ajaxSetup({ cache: false });    
    autoUpdate('URL_TO_FEED_AS_HTML', '.discussion');   
    setInterval("autoUpdate('URL_TO_FEED_AS_HTML', '.discussion')", 10000); 
});

您可以检查输入字段是否为空,如果不是,则不自动更新。然后,当他们发布时,您将清空输入,并且您的自动更新将继续

$(document).ready(function()  {
    $.ajaxSetup({ cache: false });  

    autoUpdate('URL_TO_FEED_AS_HTML', '.discussion');   
    setInterval(function() {
        if ($('input').val().length != 0) {
            autoUpdate('URL_TO_FEED_AS_HTML', '.discussion');
        }
    }, 10000); 
});

正如Rory McCrossan所建议的那样,添加最新的讨论内容将使您获得更好的性能和功能。您可以通过查询比当前时间戳更新的任何内容(上次查询的时间戳,而不仅仅是在查询结果之前),然后使用append()将数据添加到页面上。

您不需要每隔十秒钟重新加载表单,只需从服务器检索新消息即可

为了做到这一点,您必须更改一些逻辑,包括客户端和服务器端


另外,看看websocket,它可能对你做什么有用。基本上,您不必重新加载整个邮件,当发送新邮件时会发生一个事件,您只需加载即可。

实际上,我不清楚您的问题…但我理解的是,您正在刷新整个屏幕,因为问题就在那里…因此,请尝试创建两个不同的div,并根据您的需要进行渲染。

更改您的逻辑,以便您仅通过AJAX检索新项,并附加它们,而不是覆盖整个屏幕的HTML元素。另外,我会使用
setTimeout
并在完成前一个AJAX更新后启动下一个AJAX更新,以阻止请求排队。谢谢您的想法!