【问题标题】:iOS6 Safari JavaScript Ajax Polling Bug?iOS6 Safari JavaScript Ajax 轮询错误?
【发布时间】:2012-10-31 16:28:12
【问题描述】:

我有一个 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 上没用,情况不是很好。 谢谢!

【问题讨论】:

  • ios6 safari 缓存 ajax 结果。看到这个question
  • fyi 您可以将setInterval("getUpdates()", refresh); 更改为setInterval(getUpdates, refresh); 以防止eval 被使用。
  • NuclearGhost,已经修复了,你能把它放在答案中,我可以接受并提供一些 cmets 吗?

标签: javascript jquery safari ios6 mobile-safari


【解决方案1】:

我的两分钱你不应该使用 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");
}

【讨论】:

  • 这有帮助吗?我在 ios6 及更高版本的 safari 上总是遇到旋转问题,想知道这个答案是否在您的移动应用上修复了它?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-03-19
  • 2016-01-28
  • 2012-02-24
  • 2012-09-16
  • 2011-04-20
相关资源
最近更新 更多