2

我正在编写一个基本的推送消息系统。一个小的变化导致它停止正常工作。让我解释。在我的原始版本中,我能够将代码放入文档中,如下所示:

<head>
  ...text/javascript">
  $(document).ready(function(){
    $(document).ajaxStop(check4Updates);
    check4Updates();
  });

  function check4Updates(){
    $.getJSON('%PATH%', callback);
  };
...
</head>

这工作得很好,即使服务器返回 null(它会在 2 分钟超时之后)也会保持连接打开。它只会无限期地一遍又一遍地调用 getJSON 函数。快乐的熊猫。

现在,我必须将代码段放在标签之间。访问 $(document).ready() 函数几乎是行不通的。

<body>
...
check4Updates();
$("body").ajaxStop(check4Updates);
...
</body>

这工作......一段时间。此后不久,它将停止调用 check4Updates 并进入无限循环并使用 100% 的处理器时间。

我正在尝试获取它,以便重复调用 check4Updates 直到页面关闭。如果有人对为什么我的简单更改不再按预期运行有任何见解,请告诉我。感谢您花时间阅读并帮助我。

最好的问候,范阮

4

4 回答 4

7

是的,你不会想要使用那个循环,你几乎是在自己,更不用说锁定客户端了。

很简单,创建一个投票插件:

来源:http ://web.archive.org/web/20081227121015/http://buntin.org:80/2008/sep/23/jquery-polling-plugin/

用法:

$("#chat").poll({
    url: "/chat/ajax/1/messages/",
    interval: 3000,
    type: "GET",
    success: function(data){
        $("#chat").append(data);
    }
});

备份它的代码:

(function($) {
    $.fn.poll = function(options){
        var $this = $(this);
        // extend our default options with those provided
        var opts = $.extend({}, $.fn.poll.defaults, options);
        setInterval(update, opts.interval);

        // method used to update element html
        function update(){
            $.ajax({
                type: opts.type,
                url: opts.url,
                success: opts.success
            });
        };
    };

    // default options
    $.fn.poll.defaults = {
        type: "POST",
        url: ".",
        success: '',
        interval: 2000
    };
})(jQuery);
于 2009-04-30T23:11:29.463 回答
0

使用超时,这些类型的循环是一个非常糟糕的主意,所以如果您出于某种原因必须使用轮询,请确保您不要一直敲打您的后端。

于 2009-04-30T22:39:09.340 回答
0

您要么需要更改为 altCognito 描述的轮询方法,要么可以使用 comet,它旨在将数据从服务器推送到客户端。根据您的需要,您可以使用类似 Jetty (for Java) 或 Twisted (Python) 或WebSync (ASP.NET/IIS)

于 2010-01-10T16:42:26.873 回答
0

我认为这是关于服务器推送?

使用 Socket.IO 怎么样?

参考:Google Group ( http://socket.io/ )介绍 Socket IO 0.9

参考:http ://techoctave.com/c7/posts/60-simple-long-polling-example-with-javascript-and-jquery

参考: websockets、Node.js 和 jQuery 的乐趣 ( http://nayna.org/blog/?p=159 )

于 2013-01-14T03:23:02.580 回答