浏览器在Ajax请求上进入"忙"状态

Glu*_*ber 6 ajax jquery

我目前正在为不支持multipart 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);
        }
    });
};

Run Code Online (Sandbox Code Playgroud)

请注意,我通过将request.responseText直接传递给回调来绕过Jquery的数据解析功能,因为Jquery似乎不支持multipart ajax响应,并且我希望在通信路径上保持一致.

Dou*_*ner 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);
        }
    });
};
Run Code Online (Sandbox Code Playgroud)