如何创建增量加载网页
我正在写一个页面,用来处理大量数据。因为返回的数据量太大,所以我的页面加载起来几乎是无穷无尽的,等到结果出来的时候可能要等很久。因此,我需要实现一个逐步加载的页面,就像这个网址一样:
每次输入搜索词时,页面会不断加载,直到有结果出来,然后逐步显示,感觉很酷 :D。
[编辑] 我使用的是Python CGI(服务器端)和Jquery(客户端)。我在这里问过一个类似的问题:
我想在服务器上只请求一次脚本,然后让客户端页面逐步显示结果,这让我很头疼。如果我没理解错的话,长轮询之类的东西并不适用于这种情况,对吧?
我正在尝试使用flush()这个方法,但可能我在这里漏掉了什么,始终无法让它工作 :(,结果总是一次性全部传到客户端。而且获取的前几个字节和结果都是非常笼统的术语。如果有人能给我一些可以运行的代码,我会非常感激,因为我现在很困惑。非常感谢。
[编辑] 由于我想坚持只调用一次的方式,我尝试关闭Apache2的mod_deflate,但到目前为止都失败了。我在网上搜索了这个问题,发现有一些和我一样的情况,但都没有找到解决办法 :(。
6 个回答
要实现这个功能,可以使用JavaScript在页面加载完成后获取数据,这种方法通常被称为“AJAX”。
如果你告诉我们你正在使用哪个平台,就会有人能给你更具体的信息——市面上有很多工具包可以帮助你,你不需要从头开始写JavaScript。
听起来是时候用AJAX了。当用户提交一个查询时,发送一个AJAX请求到服务器去获取一些结果。在你得到回应之前,可以显示一个“加载中”的提示信息。在页面上设置一个JavaScript定时器,让它每隔几秒刷新一次结果,直到某个标志被设置,表示没有更多结果了,这样就可以停止刷新了。可以让服务器把结果暂时存储在会话中,或者存储在数据库里。你的定时器可以发起一个AJAX请求到服务器,看看是否有新的结果被找到并存储在会话/数据库中,然后更新HTML输出,显示到目前为止找到的所有结果。
这可能会很有趣/有用:发布了开创性的AJAX增量搜索白皮书 - 数据匹配引擎来救援。
有很多方法可以实现这个目标,但基本的技巧是让搜索程序在完成之前就把结果返回到网络上。这通常是通过每隔一段结果就明确调用一次flush()函数或者类似的操作来完成的。
现在,展示这些结果你可以选择:
使用AJAX:返回一个非常小的页面,里面有JavaScript代码,这段代码会触发搜索,并在结果被逐步返回时修改网页内容(或者多次调用搜索程序,带上一个参数来指定你想要多少结果和从哪个位置开始)。
使用简单的HTML:使用浏览器不需要等到完全加载才能显示的HTML(这主要是避免使用表格,因为表格通常需要等到整个表格的数据都到齐后才能显示)。
当然,如果我们知道你在用什么编程语言,你可以得到更具体的建议。