2

我正在开发一个 jQuery 插件,人们可以将它包含在他们自己的页面中。该插件在我正在运行的位于不同域的服务中生成作业。

为了突破域边界,我使用了 jQuery 的 JSONP 功能,它可以很好地生成作业。但是,我还需要显示“进度”(0 -> 100%)。到目前为止,我的计划是不断“轮询”工作的进展(彗星会更好,但 AFAIK 不可能跨域)。

问题是每秒轮询进度会导致 Firefox 在标签标题中不断闪烁“正在加载...”,我觉得这很烦人。(Firefox 这样做是因为 JSONP 通过附加到它然后“加载”的 DOM 的脚本标签来工作)。

所以我的问题的实质是:

是否可以抑制“正在加载...”选项卡标题消息 - 或者 - 是否有更好的方法以跨域方式“流式传输”进度更新?

——费利克斯·盖森多弗

4

3 回答 3

0

不幸的是,ajax 调用只有在完成后才会返回,因此无法让它更新您的进度。

我建议使用加载微调器或其他东西。

如果显示精确的加载进度是绝对要求,您可能需要从不同的角度进行处理。

于 2009-08-13T17:09:23.487 回答
0

如果这是一项长期运行的工作,也许您可​​以获得一些平均运行时间并为用户伪造它,使用不频繁的轮询来调整您伪造的完成百分比。

假设平均工作需要十分钟。您可以计算出平均每秒应该完成多少百分比,并在客户端完全更新该数量。

然后,当您的 30 秒计时器用完时,轮询服务器以获取实际的完成百分比,并更新您的进度条的速率,以便客户端的假货将在服务器作业的新估计完成时间完成。

您可以做一些数学运算来找到平均表现和当前测量时间之间的中间地带,但这取决于运行工作时间的可变性。

于 2009-10-24T08:05:21.237 回答
0

如今, CORS支持越来越广泛。您现在可以通过使用 CORS 来确定跨域 XMLHttpRequests 来正确解决问题,并且检测到缺少 CORS 支持并回退到旧浏览器的 JSONP 是微不足道的。

第一个链接上有示例检测代码,详细介绍了它在 MDC上的工作原理,如果您想了解有关浏览器兼容性的详细信息,我几天前更新了 Wikipedia 文章。

它的要点是:

  • 任何现代 WebKit 浏览器(Safari 4+、Chrome 3+、新 Flock 等)
  • 任何 Gecko 1.9.1+(Firefox 3.5+、SeaMonkey 2.0+ 等)
  • Internet Explorer 8+ 和任何基于它的东西(Sleipnir 等)......但需要注意的是,它没有实现标志来通过请求传递凭据和 cookie。

值得注意的例外是:

  • Opera (no support as of 10.61)
  • Camino (2.0.5 is based on Gecko 1.9.0 (Firefox 3.0))
  • Arora (As of Arora 0.10.2, it has the API, but a bug causes requests to fail)
于 2010-09-19T05:50:54.827 回答