2012-10-31 51 views
3

我有一个Web应用程序,可以在桌面和iPhone等移动设备上运行。它一直在iOS设备上运行良好,直到我们最近将其中一台设备升级到iOS6。现在我们看到一个奇怪的错误,它似乎只针对iOS6上的Safari。它仍然可以在iOS5 Safari上正常运行,并且在iOS6 Chrome上运行正常。iOS6 Safari JavaScript Ajax轮询问题?

该错误似乎与我们查询服务器更新的方式有关。我们已经建立了一个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?我的代码中有一个错误?有没有解决方法?现在,我的网络应用在iPhone上无用,这不是一个好的情况。 谢谢!

+1

ios6 safari缓存ajax结果。看到这个[问题](http://stackoverflow.com/questions/12506897/is-safari-on-ios-6-caching-ajax-results) –

+1

** fyi **您可以更改'setInterval(“getUpdates() “,refresh);''setInterval(getUpdates,refresh);'以防止使用'eval'。 – andlrc

+0

NuclearGhost,修复它,你可以把它放在一个答案,我可以接受它,并提供一些意见? – bluedevil2k

回答

2

我的两分钱你不应该使用setInterval,而是递归地使用setTimeout调用getUpdates。这样,如果服务器需要很长时间才能响应或者您的用户界面正忙于处理,则您的请求总是相隔5秒,而不是让它们彼此叠加。

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

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

     // do client-side rendering here 

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

这帮忙吗?我在ios6和Safari浏览器上总是碰到棘手的问题,并且想知道这个答案是否解决了你的移动应用程序? – Beckyjoon