我正在制作类似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);
答案 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