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