2

当我使用 ?page=2 等参数手动更新 url 时,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. 在浏览器中按回

注意没有任何反应......现在再次按下,您会看到它有效。这是因为我使用 replaceState 用 ?p=2 更新了 URL。我将如何使这项工作能够识别这些?参数...我尝试自定义 pjax 没有成功。

4

2 回答 2

1

这是一个古老的问题,但我会为碰巧像我一样来到这里的任何人提供答案。

当您在页面上手动使用 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

于 2016-09-20T15:51:51.967 回答
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 可以更好地处理这种情况和许多其他情况。

于 2013-07-12T05:59:23.343 回答