我目前正在为不支持多部分ajax响应的浏览器使用长轮询实现某种HTTP推送。

我必须承认,尽管服务器端运行良好,但相对而言,我对前端javascript开发是陌生的,因此可能犯了一些明显的错误

问题如下,LongPolling可以在IE 6,7,8和Firefox上完美运行(即使Firefox使用了多部分功能,我也通过长时间轮询对其进行了测试),但是Safari和Chrome进入了
浏览器在ajax请求期间处于“繁忙”状态。 (它们显示Windows等待光标,并且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似乎不支持多部分ajax响应,并且我希望在通信路径之间保持一致。

最佳答案

由于没有更好的答案可以解决,所以我想知道简单的超时是否可以解决问题。很抱歉给出一个“猜测”而不是“我知道这是正确的答案”,但这实际上可以解决它。

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);
        }
    });
};

关于ajax - 在Ajax请求下进入 "busy"状态的浏览器,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/2259889/

10-12 12:39
查看更多