javascript – 长时间投票jQuery.ajax()在电话睡眠后无法回调?

前端之家收集整理的这篇文章主要介绍了javascript – 长时间投票jQuery.ajax()在电话睡眠后无法回调?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我的网络应用程序使用“长轮询”方法来跟踪我的服务器的最新数据.服务器只有在具有新数据时才可以响应,这可能相差很多分钟. (这是一个加热控制系统,您只能在室温发生变化或有人更改设置时看到更新).
var version = "0";
function updater() {
    $.ajax({
        type: "POST",url: "/listen",data: version,success: function (data) {
            version = handleUpdates(data);
            updater();
        },error: function () {
            setTimeout(updater,1000);
        }
    });
}

它在桌面浏览器和手机上工作正常,除了一种情况.我已经发现,在Android手机与Chrome的东西奇怪的事情后,手机已经睡了超过约10分钟.帖子请求似乎被删除,我猜这是合理的,因为手机睡着了.在Chrome调试器的“网络”选项卡中,POST请求的状态文本说(已取消).

问题是当我在取消请求时唤醒电话,没有调用success()或error()函数,并且我的Web应用程序从来没有被更新. $.ajax()已经打破了我的回报.

问题只发生在某些设备上.我已经能够通过向朋友借用设备进行一些特别测试.到目前为止,我只看到Android手机上的问题.但是手机没有连接到充电器.我没有在任何平板电脑,苹果设备或Windows PC上看到它.

我已经尝试为ajax设置添加一个超时:

timeout: 120 * 1000,

这有助于因为在唤醒后最多2分钟就会调用error()函数.但是我希望用户在1秒或2秒内查看更新.我不想使超时这么短,因为它会创建不必要的服务器流量.

我也尝试检测设备是否睡眠,通过在一秒钟的setInterval中查找迟到,如Can any desktop browsers detect when the computer resumes from sleep?所述.
当我检测到唤醒时,我中止()该帖子并启动另一个.这在大多数情况下都有帮助.但事实证明是不可靠的.有时,在睡眠期间,时间事件似乎保持正常,并且发布请求也被取消.它不觉得像一个可靠的解决方案.

我正在使用最新版本的jQuery:(2.1.2)和Chrome(47).

解决方法

我不知道这是否工作,我现在不能测试,但试一试
$(window).focus(function() {
    updater();
});

猜你在找的Ajax相关文章