首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >setInterval & AJAX

setInterval & AJAX
EN

Stack Overflow用户
提问于 2015-11-29 16:17:43
回答 1查看 76关注 0票数 2

我有一个简单的聊天工具来更新聊天室:

代码语言:javascript
复制
setInterval (loadLog, 2500);
function loadLog(){
    //Scroll height before the request
    var oldScrollHeight = document.getElementById("chatMessages").scrollHeight - 20;
    $.ajax({
        url: "/includes/chat/log.html",
        cache: false,
        success: function(html){
            //Insert chat log into the #chatMessages div
            $("#chatMessages").html(html);
            var newScrollHeight = document.getElementById("chatMessages").scrollHeight - 20;
            if(newScrollHeight > oldScrollHeight){
                //Autoscroll to bottom of div
                $("#chatMessages").animate({scrollTop: newScrollHeight}, 'normal');
            }
        },
    });
}

可靠地每2.5秒执行一次。但是我想节省带宽所以..。

我改变:

代码语言:javascript
复制
cache: false

代码语言:javascript
复制
cache: true

现在,它不能每2.5秒可靠地执行一次。(可能以后的每个请求都比以前的要花更长的时间?)也许不是,它的行为很奇怪)

我的研究没有取得任何成果。请帮帮忙!<3

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-11-29 16:19:42

如果启用缓存,浏览器将缓存来自先前对服务器的调用的响应,并且它不会进行后续调用。这是预期的,这也是设计这个cache: true属性的目的。如果您想减少带宽使用,您可以考虑使用推送技术,而不是定期轮询。这可以使用HTML5 WebSockets来实现。在这种情况下,每当发生更新时,服务器将向客户端推送通知,而不是每2.5秒对服务器轮询一次。显然,这将只在支持WebSockets的浏览器中工作,因此,如果需要支持遗留浏览器,则可能需要在使用它们之前进行特性检测。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33984965

复制
相关文章

相似问题

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