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

时间:2020-03-05 18:44:55  来源:igfitidea点击:

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

我正在使用的页面是网站的搜索界面。我们在普通的搜索框中输入字词,然后点击"转到搜索结果页面。在搜索结果页面上,有大量的UI控件可用于对搜索结果进行过滤/排序以查找所需内容。这些控件触发的操作可能需要(相对)较长的时间(例如几秒钟)才能完成。

如果用户最初是对其结果进行过滤/排序,则此延迟很好。有一个不错的AJAX微调器,依此类推...但是,当用户单击搜索结果,然后单击"返回"按钮时,我想该页面将立即还原为他们单击时所处的状态。

我可以使用IFRAME /片段标识符作为页面历史的字典来恢复状态,但是最终发生的事情是,当用户第一次单击"后退"按钮时,将加载初始页面,然后(重新)进行AJAX查询以获取初始页面。页面状态返回,这会触发AJAX微调器,并可能再等待几秒钟。

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

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

编辑添加:我应该补充说,我试图避免cookie /会话,因为这可以防止人们打开多个浏览器窗口/选项卡并同时操纵不同的搜索结果集。

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

解决方案

回答

只需使用一个cookie。

回答

使用"在URL方法末尾添加一些信息到"会有助于触发页面更改事件。

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

回答

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

Cookie和会话是个好主意,但我们也可以将这些内容保留在数据库中。这给我们带来了一个额外的优势,那就是能够在不同的浏览会话中保存用户的过滤首选项(例如,例如,他正在办公室里找东西,然后决定在家时继续搜索)。

这完全取决于过滤器的复杂性和天气,这是我们认为用户将要使用的跨不同浏览会话的原因。

回答

Edited to add: I should've added that
  I'm trying to avoid cookies/sessions
  because this prevents people having
  multiple brower windows/tabs open and
  manipulating different sets of search
  results at the same time.

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

  • 如果未设置片段标识符,则在第一页加载时创建令牌
  • 浏览之前,将所有临时ajax数据存储在该令牌作为索引的cookie中。
  • 回击时,如果设置了片段标识符,则从cookie中的相应令牌加载数据。
  • 我们甚至可以添加"时间"字段以使令牌过期,等等。

示例Cookie(JSON):

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

回答

我们是否调查过YUI浏览器历史记录管理器?