在 Safari 浏览器上的 iPhone 上长轮询时出现加载指示器

7

我正在尝试使用XMLHttpRequest进行长轮询。在所有支持的浏览器上都可以正常工作,但是在iPhone上的Safari上,每次ajax调用都会显示加载指示器,对于长轮询来说有点烦人。

我读到需要等待文档加载完成,但似乎不起作用。是否有其他已知的解决方法?


+1 - 就算你不使用长轮询,这也是很烦人的。 - Tim M.
很遗憾,当我查看一个包含服务器发送事件的页面时,我也遇到了同样的问题。 - theiOSDude
你尝试过使用Web套接字吗?例如像socket.io这样的东西。 - David Hellsing
2个回答

1
我也遇到了相同的问题,尝试使用简单的XHRO、隐藏的iFrame等方法,但在iPhone上根本行不通。似乎直到整个文档加载完毕,它才会更新DOM或执行任何操作,在我的例子中是长轮询的持续时间。
我还没有尝试过的唯一一件事就是JSONP。也许你可以尝试一下JSONP。
请告诉我们您是否能够尝试JSONP,以及它是否有效或其他任何解决方法!
更新:我不知道为什么这被标记为答案,我觉得它不是,所以请告诉我如何将它变成评论而不是答案。

这是你对问题的答案 :) 但没关系,我会尽快尝试并在这里给你反馈,所以感谢你的输入 :) - Florian Müller
1
我尝试了JSONP,但似乎对我没有用 - 我甚至不能将源加载到:/ - Florian Müller
2
@Florian,“我甚至没有加载源代码”,所以你无法运行服务器返回的JS?你能发布一些简化版本的代码吗?我知道长轮询很难在Safari上工作..我真的很想知道Etherpad和/或Google聊天是如何工作的..我怀疑目前在iPhone上它们仍然使用短轮询周期性AJAX调用..让我知道兄弟.. - Sajjan Sarkar

1

我也遇到了同样的问题。

让长轮询(或任何轮询)在所有浏览器上都能正常工作真是一件头疼的事情,特别是Safari。天哪。

socket.io是一个解决方案。


我不能使用这个,因为我只被允许在客户端开发,所以我只能创建JavaScript、PHP和HTML结构。 - Florian Müller
在这种情况下,您可能应该考虑使用jQuery的$.ajax()函数来完成任务,而不是XMLHttpRequest。我相信它对于多个浏览器具有更好的兼容性。您可以在Safari中使用$.ajax()运行简单测试,然后进行构建。 - khaverim

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