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

时间:2014-05-15 09:07:54

标签: javascript jquery ajax

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

你知道如何防止这种情况吗?

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

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); 
});

3 个答案:

答案 0 :(得分:1)

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

$(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()将数据添加到页面上。

答案 1 :(得分:0)

您不需要每十秒重新加载一次表单,只需从服务器检索新邮件。

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

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

答案 2 :(得分:0)

实际上,我明白了你的问题...但是我明白你是在刷新整个屏幕,因为那个问题就在那里......所以试着创建两个不同的div并根据它们渲染它们你的需要。