简短版本:寻找等待异步 XHR 请求的方法或让同步 XHR 在 Safari 中工作的方法。
更长的版本:我正在开发一个使用混合在一起的各种外部数据源的 Web 服务。我正在使用 Javacript 前端,它可以对我的 PHP 服务器代码进行 AJAX/XHR 调用。没有跨站点问题,因为客户端只从我的服务器请求数据(服务器发出外部数据请求)。
我正在使用同步 XHR 请求,因为在数据显示在屏幕上之前,我需要对数据进行一些加载后处理(排序、过滤等)。
这一切在 IE、FF 和 Opera 上都可以正常工作,但对 Safari 来说似乎是个问题(我还没有尝试过 Chrome)。
在我的 Windows 机器上使用 Firebug for Safari,我可以看到服务器调用 beng,然后在 10 秒以上的时间后失败。在我的 iPad 上,消息稍微好一些,因为它说:NETWORK_ERR: XMLHttpRequest Exception 101: A network error occurred in synchronous mode。
一些研究表明 Safari 在同步模式下会在 10 秒后超时。似乎有一个超时功能,您可以使用该超时功能来扩展它(Safari 的最大限制为 60 秒)。不幸的是,我无法让它工作。
我现在想知道人们会建议通过更改客户端 Javacript 代码来解决此问题的最佳方法。
我正在考虑的两个选项是(i)找到一个 Safari 浏览器将遵守的同步 XHR 超时的工作示例;或者 (ii) 在异步 XHR 调用周围有某种包装器,以便加载后处理首先等待加载。
我不是一个特别有经验的 Javascript 黑客,但我已经在这个项目上设置了相当数量。我没有使用过 JQuery 或任何其他框架,我更愿意使用原始 JS,以避免学习额外的语法。[您可能从我之前的帖子中看到,我过去曾尝试使用 JQM 和 Spry,但事实证明两者都是错误的选择,至少在现阶段,并且现在已经被抛弃了]。
我觉得回调可能是正确的等待异步选项,但我不确定它是如何工作的或者你将如何编码。
这只是现阶段的原型,因此可以接受肮脏的黑客攻击。一旦我证明了它的功能,一个完整的重写已经在卡片上。
感谢人们对此的想法和建议。
问候,皮特。