Jquery设置间隔问题

时间:2010-12-11 18:34:57

标签: jquery setinterval

我正在制作类似Facebook的聊天系统,因此我系统的用户可以互相聊天。出于某种原因,当我运行此间隔以检查新聊天时,它在Firefox中正常工作,但在Internet Explorer中不能正常工作。有没有关于Internet Explorer不喜欢的setInterval的具体内容?

编辑:我在IE中遇到的具体问题是,不是通过此setInterval加载新聊天,而是根本没有发生任何事情。它在firefox中工作正常,并在输入数据库时​​加载新聊天。我不确定此代码的哪一部分可能导致错误,但我怀疑它是setInterval函数。

或者可能是Ajax请求的频率?

  setInterval(function(){ 
      // Load Chats
     },500);

一边注意: 在每个间隔我都有一个ajax请求加载一个查询数据库的PHP文件,看看自页面加载以来是否有任何新的聊天添加到数据库。如果是,则为该聊天会话设置新的聊天窗口。继续查询数据库并运行mulitpule ajax请求是不对的?还有更好的方法吗?

这是我正在做的简化版本:

setInterval(function(){
   // Get new DB Entries 
   $.get(url, data,handlerFunction); 

   function handlerFunction(result){
   // Load new chats if they exist in the DB 
   } 
 },500);

2 个答案:

答案 0 :(得分:3)

  

有没有关于Internet Explorer不喜欢的setInterval的具体内容?

不,没有。

  

或者可能是Ajax请求的频率?

是。让响应处理程序设置下一个请求,不管它们需要多长时间才能每半秒发送另一个请求。您只需达到并发请求的限制并排队一长堆。

答案 1 :(得分:1)

我现在可以告诉你,在你的“ajax调用定时器”的情况下,我避免使用setInterval,而是使用setTimeout。

因为例如int=self.setInterval("clock()",1000);这将立即调用时钟函数并且每隔一秒调用一次,无论执行时间clock()可能在内部。

另一方面,var t=setTimeout("clock()",1000);这将等待一秒然后将开始调用clock()函数,如果再次调用settimeout,它将等到clock()完成执行并将再次调用它。

关于此的一些有用的链接:
http://www.w3schools.com/jsref/met_win_setinterval.asp
http://www.w3schools.com/js/js_timing.asp
http://zetafleet.com/blog/why-i-consider-setinterval-harmful
http://javascript.about.com/library/blstvsi.htm