我在尝试使用浏览器的“后退”和“前进”按钮时遇到了 Ajax 应用程序的问题。我正在使用 jQuery History 插件来启用浏览器历史记录。
该应用程序由一个产品页面组成。有一个排序栏,使用户能够按各种值对产品进行排序。用户可以选择产品服装类别(连衣裙、上衣、下装、裙子等)、子类别部门(裙子:迷你、超长、高腰、波西米亚风/嬉皮士等)、尺码(XS SML XL XXL XXXL)、颜色(白色、黑色、灰色、蓝色、红色等),以及时代和材料。
大多数选项是通过使用 Ajax 将最新选择的选项加载到适当的 DIV 来启用的。
例如,要选择黑色,将执行以下代码
$('#colorSort').load('colorSort.php?color=Black');
那么如果用户选择布朗:
$('#colorSort').load('colorSort.php?color=Brown');
然后如果用户取消选择黑色:
$('#colorSort').load('colorSort.php?colorRemove=Black');
只要我们不需要支持后退/前进按钮,这就可以正常工作,但是当通过 jQuery History 添加后退按钮功能时,我们会遇到问题。例如:使用我们之前的示例,用户选择了黑色和棕色。现在假设用户单击后退按钮。用户希望他们的棕色选项被删除,但事实并非如此,因为正在加载的 URL 是:
colorSort.php?color=Black,
并不是
colorSort.php?colorRemove=Brown
这就是它需要的。
我尝试通过将一组“撤消”参数附加到查询字符串来解决这个问题。例如,
colorSort.php?color=Brown//colorRemove=Brown
包含双斜杠之前的当前查询字符串和斜杠之后的“后退”查询字符串。所以使用这段代码,如果我知道点击了一个新链接,我可以加载当前的查询字符串(在斜杠之前),如果我知道点击了后退按钮,我可以加载斜杠后面的“后退”查询字符串.
但问题是似乎没有任何方法可以检测是否单击了后退/前进按钮。jQuery History 在 hashchange 事件下运行,并且该事件对于触发它的事件没有区别(据我所知)。
这是我的问题。如果 StackOverflow.com 的超级聪明人能帮助我找到解决方案,我将不胜感激。谢谢!