现在我使用AJAX最大的问题是,如果我在页面上使用AJAX,请转到另一个页面,然后使用浏览器的返回按钮返回任何使用AJAX更改的内容。
我已经考虑过使用jQuery Addresss插件来解决这个问题,但是我不喜欢它仅仅修改了“#whatever.html”的URL,而不是完全改变它。
理想情况下,当我进行相关的AJAX调用时,我想要的是将URL从:“www.example.com/p:2/”转到“www.example.com/p:3/”。
这是可以吗
解决方法
不,这是不可能的。更新:现在可以通过HTML5历史记录API – 参见
razbakov’s answer。
我希望你意识到你正在努力解决一个非常困难的问题。
让我们说你的网址看起来像
http://example.com/mypage/
如果以编程方式更改窗口位置
http://example/mypage/1/
浏览器将接管并尝试导航到该页面,那里有您的花哨的ajax代码!
那有什么办法呢?你使用URL片段。
假设你有这样的URL,
http://example.com/anotherpage/#section
浏览器将首先加载http://example.com/anotherpage/,并尝试找到一个名为“section”的锚点并滚动到该位置。这个行为被’Addresses’插件所利用。这与“滚动到顶部”链接的工作方式类似。
所以如果你在页面上
http://example.com/mypage/
并将URL更改为
http://example.com/mypage/#1
浏览器不会加载新页面,而是尝试找到名为“1”的锚点并滚动到该锚点。
即使您已经设法添加到URL的片段,这并不意味着工作完成。如果用户按下后退按钮,DOM将被重置,您将不得不解析这些片段并重新创建DOM。这绝对不是微不足道的。