长轮询一个node.js服务器url无法在IE中工作

时间:2014-07-13 06:34:38

标签: javascript jquery node.js internet-explorer long-polling

所以我试图测试这个使用jquery进行长轮询的应用程序来查询用node.js编写的服务器。长轮询代码是

(function poll(){
        $.ajax({ url: "http://localhost:3000/test", 
            success: function(data){
                alert(data);
        }, dataType: "html", complete: poll, timeout: 100000});
    })();

服务器端代码实际上相当简单,如下所示。

var http = require('http').Server(app);
app.get('/test', function(req, res){
 res.setHeader('Access-Control-Allow-Origin','*');
 setTimeout(function(){
    res.send(JSON.stringify({"msg":"stuff"}));
},10000);

});

http.listen(3000, function(){
  console.log('listening on *:3000');
});

所以这个想法很简单我编写了一个客户端js库,它使用jquery来长时间轮询服务器并在服务器发送一些数据时显示一些数据。服务器真的可以用任何东西编写吗?我已经使用node.js来快速进行测试。这适用于Firefox和Chrome,但它在IE中不起作用。

仅供参考,我已经更改了代码并删除了特定于我的应用程序的所有代码,因为实际上没有必要发布一些非常长的代码。

具体来说,我使用的是IE10。

我已阅读此post并将缓存设置为false似乎对我不起作用。我甚至无法得到第一个请求。

2 个答案:

答案 0 :(得分:-1)

对于IE,您可能希望更改代码以设置超时以调用自身,而不是依赖于ajax调用中的超时/完成。这可能会解决它。

另外,在每个调用的URI上添加一个简单的唯一值。所以尝试这样的事情:

(function poll() {
    $.ajax({ url: "http://localhost:3000/test?date=" + Date.now(), 
        success: function(data) {
            alert(data);
        }, dataType: "html"
    });
    setTimeout(poll, 100000);    
})();

答案 1 :(得分:-1)

可能是jQuery的AJAX中的一个错误。向服务器和客户端添加一些console.log()语句,看看IE是否发送与流行浏览器相同的数据。