保持jQuery .getJSON()连接打开并在页面正文中等待?

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

 ...text/javascript"> $(document).ready(function(){ $(document).ajaxStop(check4Updates); check4Updates(); }); function check4Updates(){ $.getJSON('%PATH%', callback); }; ...  

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

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

  ... check4Updates(); $("body").ajaxStop(check4Updates); ...  

这有效……有一段时间了。 此后不久,它将停止调用check4Updates并进入无限循环并使用100%处理器时间。

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

最诚挚的问候,Van Nguyen

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

很简单,创建一个轮询插件:

资料来源: 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); 

使用超时,这些类型的循环是一个非常糟糕的主意,所以如果你因任何原因必须使用轮询,请确保你不要继续锤击你的后端。

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

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

使用Socket.IO怎么样?

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

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

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