iOS6 Safari JavaScript Ajax轮询错误?

时间:2012-10-31 16:28:13

标签: javascript jquery safari ios6 mobile-safari

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

该错误似乎与我们查询服务器的更新方式有关。我们设置了一个每5秒钟发生一次的Ajax调用。 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上没用,不是一个好的情况。 谢谢!

1 个答案:

答案 0 :(得分: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");
}