【问题标题】:Long polling a node.js server url not working in IE长轮询 node.js 服务器 url 在 IE 中不起作用
【发布时间】:2014-07-13 06:34:38
【问题描述】:

所以我正在尝试测试这个应用程序,它使用带有 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 似乎对我不起作用。我什至无法完成第一个请求。

【问题讨论】:

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


    【解决方案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);    
    })();
    

    【讨论】:

    • 但这会破坏长轮询的目的吗? techoctave.com/c7/posts/…
    • 不,同样的事情成功的方法,只有一个被更多的浏览器支持。
    • 长轮询的全部目的是保持一个打开的连接,这样服务器只有在有数据时才发送数据。我不完全相信 IE 不能进行长轮询,所以我不会诉诸轮询。如果您有任何链接或文档证明 IE 无法进行长轮询,请随时传递它,我将更改我的解决方案。
    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 2013-05-25
      • 1970-01-01
      • 2012-06-10
      • 1970-01-01
      • 1970-01-01
      • 2012-11-08
      • 2012-12-09
      • 2019-02-10
      • 1970-01-01
      相关资源
      最近更新 更多