setInterval替代

在我的应用程序中,我每秒轮询Web服务器的消息并在前端显示它们。 我使用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
        }
    });

状态是在“views.py”(Django)中设置的一个布尔值。 谢谢一堆。


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

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

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

这种方法需要牢记的是,大多数Web服务器都是为了从客户端获得请求并尽快做出响应而构建的; 他们不打算长期保持活力。 有了Comet,你将拥有比平常更开放的连接,可能会消耗比预期更多的资源。


您的clearInterval检查仅在文档就绪事件被触发时进行检查。

如果您提供的代码与浏览器中的代码完全相同,则您将字符串“{{status}}”与字符串“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();
});

距离你比较近,但你仍然需要弄清楚如何决定何时停止投票。

链接地址: http://www.djcxy.com/p/49635.html

上一篇: setInterval alternative

下一篇: constructor have include a void return type?