2010-02-14 166 views
6

我目前正在对不支持多部分ajax响应的浏览器实施一种使用长轮询的HTTP推送。在Ajax请求中进入“繁忙”状态的浏览器

我不得不承认,在服务器端工作正常,我是relativly新的前端JavaScript开发,因此可能已经取得了一些明显的错误

的问题如下LongPolling完美的作品在IE 6 ,7,8和Firefox(尽管Firefox使用多部分,我也用长轮询进行了测试),但Safari和Chrome在ajax请求期间输入 浏览器处于“繁忙”状态。 (他们表现出窗口等待光标,和Safari也显示在标题栏中的“装入”指示符)

这当然不是desireable的..

这里是我的代码做基于jQuery的长期调查1.4.1:


function MepSubscribeToQueueLongPoll(name, callback) { 

    var queueUrl = MepGetQueueUrl(name, "LongPoll"); 
    MepLongPollStep(queueUrl, callback); 
}; 

function MepLongPollStep(url, callback) { 
    $.ajax({ 
     url: url, 
     async: true, 
     cache: false, 
     success: function (data,status,request) { 
      callback(request.responseText); 
      MepLongPollStep(url, callback); 
     } 
    }); 
}; 

注意,我绕过数据直接传递request.responseText回调解析的jQuery功能因为jQuery似乎并不支持多AJAX的阶跃响应,我想成为横跨通信一致路径。

回答

3

由于没有更好的答案已经上前,我不知道是否一个简单的超时会解决问题。很抱歉给一个“猜测”,而不是“我知道这是真实的答案”,但这可能实际上修复它:

function MepLongPollStep(url, callback) { 
    $.ajax({ 
     url: url, 
     async: true, 
     cache: false, 
     success: function (data,status,request) { 
      callback(request.responseText); 
      window.setTimeout(function(){ 
       MepLongPollStep(url, callback); 
      },10); 
     } 
    }); 
}; 
+0

谢谢,我似乎知道一点关于浏览器的行为,但你的小费固定所有浏览器都存在这个问题 – Gluber 2010-02-14 05:15:35