是否可以在BACK按钮点击中保持(不重新加载)AJAX页面状态?

时间:2008-08-29 09:13:27

标签: ajax

我熟悉在各种情况下使后退按钮在AJAX应用程序中工作的几种方法,但我还没有找到一种能够在我的特定场景中正常工作的解决方案。

我正在使用的网页是网站的搜索界面。您可以在普通搜索框中输入术语,单击“转到搜索结果页面”。在搜索结果页面上有大量UI控件,用于过滤/排序搜索结果以查找您要查找的内容。由这些控件触发的操作可能需要(相对)长的时间才能完成(例如几秒钟)。

如果用户最初过滤/排序结果,这种延迟很好......有一个很好的AJAX微调器等等......但是当用户点击搜索结果然后单击BACK按钮时,我希望页面能够立即恢复到他们点击时所处的状态。

我可以使用IFRAMEs /片段标识符作为页面历史记录的字典来恢复状态,但最终发生的是当用户第一次点击后退按钮时加载初始页面,然后它(重新)进行AJAX查询获取页面状态,触发AJAX微调器和另一次可能的几秒钟。

当用户通过BACK按钮返回页面时,是否有任何方法不需要对页面进行这种两阶段加载?

编辑添加:我偏向于jquery,但我对依赖于其他库/工具包或独立/原始javascript的解决方案感到满意。

编辑添加:我应该补充一点,我正在尝试避免使用Cookie /会话,因为这可以防止人们同时打开多个浏览器/标签页并同时操作不同的搜索结果集。

编辑:马特,你能详细说明你提出的解决方案(通过片段标识触发页面更改事件)吗?我看到这对于在同一页面上单击BACK按钮有什么帮助,但是在点击特定结果后没有回到搜索结果页面。

6 个答案:

答案 0 :(得分:1)

只需使用 Cookie

答案 1 :(得分:1)

你调查了YUI Browser History Manager吗?

答案 2 :(得分:0)

使用“在URL方法结尾处向#添加一些信息”来触发页面更改事件会有所帮助。

这样,单击后退按钮实际上不应该更改页面,并且您应该能够在没有第一页加载的情况下恢复状态。

答案 3 :(得分:0)

使用与用户个人资料相关的持久性内容。

Cookie和会话是好主意,但您也可以将这些内容保存在数据库中。这为您提供了额外的优势,即能够在不同的浏览会话中保存用户的过滤首选项。(例如,如果他在办公室寻找某些东西,然后决定在他回到家时继续搜索)。

这一切都取决于过滤器和天气的复杂性,或者不是你认为用户会想要在不同的浏览会话中使用它。

答案 4 :(得分:0)

  

编辑补充:我应该补充一点   我正在努力避免使用cookies / session   因为这会阻止人们拥有   多个浏览窗口/标签打开和   操纵不同的搜索集   结果同时发生。

您可以创建随机令牌并将其分配给片段标识符。

    如果没有设置片段标识符,
  • 在第一页加载时创建一个标记
  • 在导航之前,将所有临时ajax数据存储在cookie中,并将该令牌作为索引。
  • 回击时,如果设置了片段标识符,则从cookie中的相应标记加载数据。
  • 你甚至可以添加一个“时间”字段来过期令牌等......

示例cookie(JSON):

{"ajaxcache":[{"token":<token>,"time":<time>,"data":<data>}, ... ]}

答案 5 :(得分:0)

尝试使用 localStorage 对象。这是crossbrower libs jStorageWEBSHIMS json-storage