Long Poll和IE的XDomainRequest对象

时间:2011-08-12 08:43:27

标签: ajax internet-explorer chat xdomainrequest xdr

我正在尝试实施一个使用长轮询来从远程(跨域)服务器获取邮件的聊天应用。

有没有办法用XDomainRequest做到这一点?似乎我的连接总是在随机的秒/毫秒(通常约1-3秒)后终止,而不是等待服务器响应。

IE开发人员告诉我,请求已被“中止”且未收到任何数据。

XDomainRequest是否不适合长时间轮询,或者我在这里遗漏了什么?

2 个答案:

答案 0 :(得分:4)

还有这个问题,作为竞争条件,使用jQuery iecors库。尽管Fiddler显示了200响应,IE网络控制台仍将请求显示为“中止”。

经过几轮顽固的谷歌搜索,我遇到了这个链接,建议填写所有的回调处理程序。我怀疑onProgress只被调用,并且失败,当请求被一个沉重的页面减慢时,导致我的种族行为。

IE9 XDomainRequest issued requests may abort if all event handlers not specified

对于jquery.ieco​​rs.js,除了一些变量名称拼写错误外,它还缺少onprogress处理程序。添加此行似乎可以解决此问题。

xdr.onprogress = function () {};

答案 1 :(得分:2)

对我来说,这个问题涉及使用XDomainRequests作为单个批处理函数运行的多个查询函数。 WebTools显示对远程服务器的所有请求都将中止,但最后一次。在每个查询工作之前运行警报(查询)。所以我最终在循环中移动了我的XDR调用(例如new window.XDomainRequest),因此将为远程服务器的每个查询创建一个新实例。每个结果都通过getElementById(id).value插入到不同的输入框中。通过添加延迟计时器,我可以看到它现在按顺序运行填充每个值,没有任何问题。毫不拖延,它几乎是瞬间的。