使用Parameters更新URL时,Pjax后退按钮不起作用

时间:2012-09-09 03:43:54

标签: jquery pjax

当我使用某些参数(例如?page = 2)手动更新网址时,pjax将无法识别该网址:

window.history.replaceState(null,document.title,"?page=2");

我也尝试过使用pjax

$.pjax({url: "?page=2", container: (container || '#null'), replace: true, dontRequest: true})

(注意我添加了dontRequest参数,所以我可以做一个“假的”pjax调用,它实际上不会触发.ajax,但仍会更新url,但没有成功)

要在实际网站上复制此内容:

  1. 转到http://2u.fm(点击模式)
  2. 向下滚动,直到添加?p = 2
  3. 点击热门
  4. 在浏览器中按回来
  5. 注意没有任何反应......现在再次按回来,你会发现它有效。这是因为我使用replaceState使用?p = 2更新URL。我如何使这项工作能够识别这些? params ...我尝试定制pjax但没有成功。

2 个答案:

答案 0 :(得分:0)

在我看来,PJAX只添加路径,而不是完整的url状态。这就是你遇到这个问题的原因。

如果您使用的是Rails,那么一定要尝试Wiselinks https://github.com/igor-alexandrov/wiselinks。它是一种用于浏览器状态管理的瑞士军刀。以下是一些详细信息:http://igor-alexandrov.github.io/blog/2013/07/11/the-way-to-wiselinks-1-dot-0/

Wiselinks更好地处理了这个和许多其他情况。

答案 1 :(得分:0)

这是一个古老的问题,但我会回答碰巧碰到这里的人。

当您在页面上手动使用pushState或replaceState时,Pjax无法正常工作。当遇到这种状态时,它什么都不做。因此,当您按后退/前进按钮到这样的页面时,pjax:popstate事件不会触发,也没有任何反应。

解决方法是使用$ .pjax.state作为pushState和replaceState的状态对象参数

history.pushState($.pjax.state, null, href)

history.replaceState($.pjax.state, null, href)

github中存在一些关于此问题的问题: issue/381issue/495

相关问题