我目前正在为不支持多部分ajax响应的浏览器实现一种使用长轮询的HTTP推送。
我不得不承认,虽然服务器端工作正常,但我对前端javascript开发相对较新,因此可能会犯一些明显的错误
问题如下:LongPolling在IE 6,7,8和Firefox上完美运行(尽管Firefox使用多部分我也通过长轮询测试它)但是Safari和Chrome输入 ajax请求期间浏览器“忙”状态。 (它们显示窗口等待光标,Safari也在标题栏中显示“加载”指示符)
这当然不可取。
以下是基于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似乎不支持multipart ajax响应,我希望在通信路径上保持一致。
答案 0 :(得分: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);
}
});
};