ajax - 浏览器根据 Ajax 请求进入 "busy"状态

标签 ajax jquery

我目前正在为不支持多部分 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/

相关文章:

Java JAX-RS 网络服务 : adding nodes to JAXB XML result as threads complete

jQuery ajax $.post 从验证插件调用时刷新页面

javascript - 如何使 window.showmodaldialog 在 chrome 37 中工作?

javascript - 如何在javascript中绘制图形?

javascript - jquery 切换多个 id

jquery - 当从 DOM 中删除违规元素时,无效表单不会重新计算其有效性

javascript - 使用 Ajax 或 Jsonp 导入 URL,无需使用 iframe

ajax - jqgrid 在表中显示之前修改从 ajax 调用返回的数据

javascript - jQuery.load() 在 Firefox 下响应错误,在 Chrome 下工作正常

jQuery 工具验证器错误消息位置