-2

我有一个从数据库中检索和显示记录的 Web 应用程序。一个用户的查询可能匹配数千条记录;在这种情况下,用户优化他的搜索是有意义的。

在查询匹配数百条记录的情况下,用户浏览这些记录可能是有意义的。困扰我的是 Web 应用程序显示记录的“页面”。在 Web 应用程序的上下文中,我认为分页是一种显示此类数据的可怕、可怕的方式。

想象以下场景:

  1. 用户运行查询:应用程序指示有 20 页并显示第 1 页。

  2. 用户点击第 2 页,然后点击第 3 页。

  3. 用户意识到他正在寻找的记录在第 2 页。用户再次点击到第 2 页。

  4. 用户认为他在第 1 页看到了类似的记录。用户在第 1 页和第 2 页之间反复单击以比较记录。

对于 Web 应用程序,每次页面更改都需要加载一个全新的页面。最终用户可能认为它只是加载更多数据,但对于浏览器来说,这与加载完全不同的页面一样多。此外,当用户在第 1 页和第 2 页之间来回循环时,会一遍又一遍地从服务器加载 相同的数据。

对于配备数十亿字节内存的现代计算机,我们已经习惯于认为计算机重新加载(通过具有高延迟的慢速连接)最多占用兆字节的文本数据是很疯狂的.

我有一个想法,每次用户滚动到记录页面的底部时,使用 JavaScript 自动加载新记录(不会有可供用户单击的分页链接 - 记录只会在用户滚动时加载)。这听起来不错;但我想到的一个缺点是,如果不先单击“打印机友好”视图,就很难打印页面。

在不使用笨重的分页系统的情况下,将数据库应用程序填充到 Web 文档中还有哪些其他想法?

4

3 回答 3

1

好吧,从一开始我就建议在页面滚动时添加新记录。但是,如果您担心获得非常长的页面。解决方案是隐藏顶部记录,以便只显示最大数量的记录。但是,您需要为用户提供最大值选项或无最大值选项,一切都显示。此外,根据他们的选择,您可能仍需要提供打印机友好的版本。另一个注意事项是,最好在说明位置的旁边添加一个东西,例如showing records 35-85 of 200.

于 2011-11-21T18:23:11.893 回答
1

我会选择“当用户滚动到页面底部时自动加载新记录”。在我看来,这是迄今为止最用户友好的方法之一。

对于打印,您可以装配每个分页集,以便它们接收“no_print”类或加载新集时的内容。当用户向上滚动时动态添加/删除该类。

于 2011-11-21T18:17:38.730 回答
1

所以在我的应用程序中,我有数百万条记录,用户可以同时查看这些记录。

我通过请求相同的 URL 但更改请求标头来加载更多记录。

这是您如何实现某些东西的方法。

假设您想按字母顺序列出世界上所有的动物。您不想通过底部的“< Previous 1 | 2 | 3 .. 9989 Next >”栏来进行分页。

  1. 您将开始并立即查询您的“资源”路线,该路线将返回一组动物:GET /resources/animals

  2. 您的请求将包含标头,说明您正在请求什么。例如,添加range: 0-24标题。相关问题:使用 Javascript 添加自定义 HTTP 标头

  3. 在服务器端,您可以确定用户正在请求项目 0 到 24,您可以使用 Response Headers 进行响应,告诉他您要返回的内容如下:returned: 0-24/12000000. 这告诉客户您已经退回了 25 件商品,从商品 0 到商品 24,还剩下 1200 万件商品。

  4. 渲染您从服务器收到的项目。

  5. 当用户进一步向下滚动页面时,查询下一组项目。使用数学并找出当前视图中的内容,您可以计算出用户正在查看的“页面”,然后可以请求相应的结果。

您可以在 Dojo 示例中看到这在实践中的工作。

阅读有关该主题的更多信息。

于 2011-11-21T18:26:20.843 回答