【问题标题】:How do I entertain the user while a page is taking a long time to load?当页面需要很长时间加载时,我如何娱乐用户?
【发布时间】:2011-11-10 18:23:47
【问题描述】:

关于这个问题:

Chrome doesn't seem to fire javascript xmlhttprequests after a form submit, but FF and IE do

点击提交后,我需要一种方法来更新页面,等待服务器响应(响应可能需要 10 分钟)来自服务器的信息(如完成百分比)

在 IE 和 Firefox 中,我可以在等待页面加载时发出 xhr 请求。在 Chrome 中这不起作用,chrome 不会触发 xhr 请求。我从来没有在网络服务器上受到点击。

其他人是怎么做到的?

【问题讨论】:

  • 小游戏,例如井字棋或跳棋。
  • 您可以在其他浏览器中使用您使用的函数来娱乐用户,并且在 X 秒后如果您检测到您的函数“statstatechange”没有被调用,请向用户反馈,例如“请等等,这可能需要几分钟”或您用于娱乐的其他类型的反馈。

标签: javascript user-interface


【解决方案1】:

永远不要让您的用户为单个页面提交等待 10 分钟。他们会恨你,你的服务器会恨你,各种各样的问题都可能接踵而至。而是:

  1. 提交请求,并将其放入队列中。
  2. 向用户返回响应,指示请求已排队。
  3. 在处理队列时更新用户。使用彗星解决方案实时进行,或者如果对时间不敏感,则每 2-3 分钟轮询一次。

【讨论】:

  • 呃。这与我现在所做的到底有什么不同?用户单击按钮,javascript 更新屏幕的一部分,显示“处理报告”。然后每 15 秒发出一次 xhr 请求,以使用报告的当前完成处理百分比更新页面的该部分。然后,当它完成时,服务器返回带有报告的页面并显示新的报告页面。它已经工作了很多年。我最近才注意到 xhr 调用在 chrome 上不起作用。
  • 彗星维基百科页面提到使用 iframe。现在这是一个有用的建议。我要试试。
  • 非常不同 - 您有 2 个请求正在处理 :)。将其卸载到队列中。如果请求中止、用户离开页面等会发生什么?
  • 那么用户没有得到他们的报告。
  • 所以我尝试了 iframe 的东西,它奏效了。如果您在 setinterval 触发的 iframe 中设置 xhr 请求,即使主页上的表单已提交,它们仍将继续触发。所以我可以用它作为一种解决方法。谢谢你的想法。
【解决方案2】:

我为用户开发的一个非常简单的排队系统在用户等待他们长时间运行的进程完成时收到了非凡的反馈。

当您阅读一些有趣的内容时,时间会过得更快,因此我从不同的新闻站点提取了 rss 提要(以 ajaxy 方式),而网络应用程序在后台轮询队列以获取进程完成。当轮询显示完成时,我只是弹出一个 js 确认框,询问用户是否要保持新闻窗口打开或返回到他们的常规工作流程。

自从推出此解决方案以来,有关处理时间的投诉几乎消失了。我并不是说它适用于所有情况,但它确实对我有用。

【讨论】:

    猜你喜欢
    • 2014-08-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-04-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多