首页 文章

setInterval替代方案

提问于
浏览
0

在我的应用程序中,我每秒都会在网络服务器上查询邮件并在前端显示它们 . 我使用setInterval来实现这一点 . 但是,只要用户停留在该页面上,即使没有数据,客户端也会继续使用请求轮询服务器 . 当通过设置变量不再生成消息时,服务器会给出指示 . 我想到使用这个变量clearInterval并停止计时器,但这不起作用 . 在这种情况下我还能使用什么?我正在使用jquery和django . 这是我的代码:

jquery:
 var refresh = setInterval(
        function ()
            {
                var toLoad = '/myMonitor'+' #content';             
                $('#content').load(toLoad).show();

            }, 1000); // refresh every 1000 milliseconds
    });

html:
div id=content is here

我可以通过每次刷新访问django变量以在html中完成 . 如果有的话,我该如何设置clearInterval?

注意:堆栈溢出不让我放是&gt&lt所以html是不完整的

谢谢

Updated 03/16/2010 我一定是做错了 . 但无法弄明白 . 这是我的clearTimer脚本,它不起作用 .

var timer = null;
$(function(){
        if ("{{status}}" == "False")
        {
           clearInterval(timer);
        }
        else
        {
            timer = setInterval(
                function(){
                    var toLoad = '/myMonitor'+' #content';  
                    $('#content').load(toLoad).show();} 
                    ,1000); // refresh every 1000 milliseconds
        }
    });

status是“views.py”(Django)中的布尔值集 . 谢谢你们 .

2 回答

  • 3

    有几个人已经回答了你的问题的具体资源,所以我想我会提供一些背景知识 .

    简而言之,您希望服务器将数据推送到浏览器以避免广泛的客户端轮询 . 没有一种良好的跨浏览器方式来支持服务器推送,因此需要更少轮询的常见解决方案是使用Comet(另一种清洁产品,如AJAX)长轮询技术 .

    使用Comet,浏览器发出请求,服务器保持连接打开而不响应,直到有新数据可用 . 当服务器确实有新数据时,它会通过打开的连接发送它,浏览器会立即收到它 . 如果连接超时,浏览器将打开一个新连接 . 这使服务器一旦可用就将数据发送到客户端 . 正如其他人所指出的,这种方法需要对Web服务器进行特殊配置 . 您需要服务器上的脚本以一定间隔检查数据,并响应客户端(如果存在) .

    这种方法需要记住的是,大多数Web服务器都是为了从客户端获取请求并尽快响应而构建的 . 他们不打算长时间保持活力 . 使用Comet,您将拥有比正常情况更多的开放连接,可能消耗的资源超出您的预期 .

  • 0

    您的clearInterval检查仅检查何时触发文档就绪事件 .

    如果您提供的代码与浏览器中的代码完全相同,那么您将字符串“{}”与字符串“False”进行比较 . 我宁愿看油漆干,也不愿等待评价为真 .

    如果您的请求超过1秒完成,该怎么办? :您将使用请求充斥您的服务器 .

    function update () {
      $('#content').show().load('/myMonitor'+' #content', function (response, status) {
        if (!/* whatever you're trying to check*/) {
          setTimeout(update, 1000);
        };
      });
    };
    
    $(document).ready(function () {
      update();
    });
    

    比你现在的地方更近,但是你仍然需要弄清楚你将如何决定何时停止投票 .

相关问题