3

我有一个 Web 应用程序,旨在在 iPhone 等台式机和移动设备上运行。它在 iOS 设备上一直运行良好,直到我们最近将其中一台设备升级到 iOS6。现在我们看到了一个奇怪的错误,它似乎只针对 iOS6 上的 Safari。它在 iOS5 Safari 上仍然可以正常工作,在 iOS6 Chrome 上也可以正常工作。

该错误似乎与我们查询服务器以获取更新的方式有关。我们已将 Ajax 调用设置为每 5 秒发生一次。Ajax 调用返回新数据,客户端使用新数据进行更新。我们现在在 Safari/iOS6 中看到的行为是,当上一个调用返回时,调用会立即发生,结果是页面不断刷新和重新绘制,使其无法使用。小微调器也一直在运行,使页面看起来永远不会停止加载。

这是设置它的客户端 JavaScript 代码:

$(document).ready(function(){

   getUpdates();
   var refresh = 5000;
   setInterval("getUpdates()", refresh);

});

function getUpdates() {
    $.post("status.jsp", {}, function(status){
       // do client-side rendering here
    }, "json");
}

这是Safari中的错误吗?我的代码中的错误?有解决方法吗?我的网络应用程序现在在 iPhone 上没用,情况不是很好。谢谢!

4

1 回答 1

2

我的两分钱你不应该使用 setInterval,而是使用 setTimeout 递归调用 getUpdates。这样,如果服务器需要很长时间才能响应或您的 ui 正忙于处理,您的请求总是相隔 5 秒,而不是让它们堆叠在一起。

$(document).ready(function(){
    getUpdates();
});

function getUpdates() {
    $.post("status.jsp", {}, function(status){

        // do client-side rendering here

        setTimeout(getUpdates, 5000);
    }, "json");
}
于 2012-10-31T16:55:16.237 回答