我正在尝试实施一个使用长轮询来从远程(跨域)服务器获取邮件的聊天应用。
有没有办法用XDomainRequest做到这一点?似乎我的连接总是在随机的秒/毫秒(通常约1-3秒)后终止,而不是等待服务器响应。
IE开发人员告诉我,请求已被“中止”且未收到任何数据。
XDomainRequest是否不适合长时间轮询,或者我在这里遗漏了什么?
答案 0 :(得分:4)
还有这个问题,作为竞争条件,使用jQuery iecors库。尽管Fiddler显示了200响应,IE网络控制台仍将请求显示为“中止”。
经过几轮顽固的谷歌搜索,我遇到了这个链接,建议填写所有的回调处理程序。我怀疑onProgress只被调用,并且失败,当请求被一个沉重的页面减慢时,导致我的种族行为。
IE9 XDomainRequest issued requests may abort if all event handlers not specified
对于jquery.iecors.js,除了一些变量名称拼写错误外,它还缺少onprogress处理程序。添加此行似乎可以解决此问题。
xdr.onprogress = function () {};
答案 1 :(得分:2)
对我来说,这个问题涉及使用XDomainRequests作为单个批处理函数运行的多个查询函数。 WebTools显示对远程服务器的所有请求都将中止,但最后一次。在每个查询工作之前运行警报(查询)。所以我最终在循环中移动了我的XDR调用(例如new window.XDomainRequest),因此将为远程服务器的每个查询创建一个新实例。每个结果都通过getElementById(id).value插入到不同的输入框中。通过添加延迟计时器,我可以看到它现在按顺序运行填充每个值,没有任何问题。毫不拖延,它几乎是瞬间的。