iOS6 Safari JavaScript Ajax轮询Bug?

3
我有一个网络应用程序,旨在在桌面和移动设备上(如iPhone)运行。一直以来,在iOS设备上都很好用,直到最近我们将其中一个设备升级到iOS6。现在我们发现一个奇怪的错误,似乎只出现在iOS6的Safari浏览器中。它仍然可以在iOS5的Safari浏览器上正常工作,而且在iOS6的Chrome浏览器上也可以正常工作。
这个bug似乎与我们查询更新数据的方式有关。我们设置了一个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的一个bug吗?还是我的代码有问题?有没有解决办法?现在我的Web应用在iPhone上毫无用处,这不是一个好的情况。


1
iOS6 Safari会缓存Ajax结果。请参考此问题 - Mark Meyer
1
你可以将 setInterval("getUpdates()", refresh); 更改为 setInterval(getUpdates, refresh); 以避免使用 eval - Andreas Louv
NuclearGhost,你修复了它,能否把它放在答案中,我可以接受并提供一些评论吗? - bluedevil2k
1个回答

2

我认为你不应该使用setInterval,而是使用setTimeout递归调用getUpdates。这样,你的请求总是相隔5秒,而不是如果服务器响应时间长或ui正在忙于处理,则会堆叠在一起。

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

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

        // do client-side rendering here

        setTimeout(getUpdates, 5000);
    }, "json");
}

这有帮助吗?我在iOS6及以上的Safari上遇到了一直旋转的问题,想知道这个答案是否解决了你的移动应用程序的问题? - Beckyjoon

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接