IE Ajax流式传输/长轮询,无需折叠服务器

时间:2011-05-03 16:51:06

标签: ajax internet-explorer streaming comet long-polling

我试图解决如何在不折叠服务器的情况下为IE进行流式传输和长轮询。这就是我的想法。

我将有一个名为:TimeServlet的servlet。

在doGet或doPost()中..我将暂停请求并在每秒发送时间。


....
suspend()

while(!stopped){
    request.writeln(new Date().toString());
}

或使用Scheduler和Runnable,但是你明白了。

在javascript中的客户端上,我将创建一个ajax连接。

我的大问题是:

1 - 如何使用IE进行流媒体传输?使用Firefox和Chrome时,我在readyState == 3时读取数据,但在IE中,数据仅在readyState == 4上可用。

2 - 如何在此示例中进行长轮询?长轮询阻塞直到服务器有数据要推送,但在这个例子中,服务器总是有东西要推送,所以客户端会做类似while(true)的事情并充斥服务器。我想我必须做那样的事情

ajax.push(null)... on readyState == 4 - >读取...之后的setTimeout(resendRequest,1); // 1秒?

有人有这样的样本吗?

我的代码适用于FF和Chrome,但现在我正在寻找IE和Opera。

修改

我发现我可以在IE中使用XDomainRequest进行流式传输。您必须在服务器代码中使用它:

response.setHeader("访问控制允许来源"" *&#34);

我还没有回答这个问题,因为我不知道如何检测到连接已经完成。

使用Ajax,很容易.. ReadyState == 4。但我不知道XDomainRequest。

我需要能够在连接关闭时触发一些javascript回调。有什么想法吗?

1 个答案:

答案 0 :(得分:1)

我找到了如何检测关闭事件。你必须使用onload方法。

所以代码看起来就像那样


var ajaxRequest = new XDomainRequest();


ajaxRequest.onload = function() { 
//alert("[XDR-onload]. responseText: " + ajaxRequest.responseText + ""); 
};

ajaxRequest.onerror = function() { alert("[XDR-onerror] Fatal Error."); };

ajaxRequest.ontimeout = function() { 
alert("[XDR-ontimeout] Timeout Error.");
};
ajaxRequest.onprogress = function() { 
//alert("[XDR-onprogress] responseText so far: " + ajaxRequest.responseText + "");
}; 

并且不要忘记在响应中添加标题(服务器端)

response.setHeader( “访问控制允许来源”, “*”);