在Internet Explorer中保持开放连接(7,8,9)

时间:2011-12-16 11:19:49

标签: javascript jquery ajax internet-explorer iis-7

我正处于一个项目中,我需要连接到客户端的服务器并检索某些图形的数据。

客户希望这是实时的东西(他们有一个正在监听连接并不断提供数据的脚本)。

我的一个大问题是,我不认为这可以在IE中完成,就像在Firefox或Chrome中一样简单。 Firefox和Chrome都支持网络套接字,所以我认为我可以制作一些能够满足客户需求的东西。

在IE中,我能做到这一点的唯一方法是使用带有ajax调用的setTimeout。

IE还有其他选择吗?

现在我们正在使用jquery .ajax()并为readyState == 3处理服务器响应的onReadystageChanged事件设置回调。但这不能按预期工作,因为连接在第一个响应后关闭

此外,我使用IIS作为代理和URL重写规则,因为我们正在使用跨域服务。但是此模块使用至少1KB的缓冲区会破坏服务器响应。这些服务是由另一家公司创建的,该公司不会在其服务器中实施CORS规范。

我如何解决这个问题并在没有缓冲的情况下收到响应?

谢谢

1 个答案:

答案 0 :(得分:1)

您可以使用长轮询和服务器端承诺来代替WebSockets。

在服务器上,您可以暂停http请求,使其以异步方式工作。

示例jQuery

poll();    
function poll(){
    $.ajax({
        url : "http://my-own-domain.com/data/",
        success : function(data) {
            //do what you want with data
            poll();
        },
        error : function(data) {
            poll();
        }
    });
}

服务器端示例:

WSRequest req = WS.url("http://the-other-domain.org/data/");
Promise<HttpResponse> respAsync = req.getAsync();
HttpResponse resp = await(respAsync);
renderJSON(resp.getString());

对于服务器端,请查看Play! Framework Async以了解如何完成此操作。