如何使pjax:postate像一个简单的pjax调用一样工作

How to make pjax:popstate work like a simple PJAX call

本文关键字:pjax 工作 一样 简单 调用 何使 postate 一个      更新时间:2023-09-26

在pjax中使用popstate时,我希望再次从服务器加载内容,而不是用浏览器的缓存内容替换。如果正在应用缓存内容,则缓存内容中的<script>根本不起作用。那么,当我们只需点击浏览器的"后退/前进"按钮时,是否有任何方法可以强制对服务器进行正常的PJAX调用,而不是使用缓存的数据?

请帮忙。谢谢

请仔细注意文件jquery.pjax.js中的第476到491行:Chris Wanstrath(defunkt)的jquery pjax。if下的代码实际上调用缓存内容,而else部分下的代码正是我们想要的。

  if (contents) {
    container.trigger('pjax:start', [null, options])
    pjax.state = state
    if (state.title) document.title = state.title
    var beforeReplaceEvent = $.Event('pjax:beforeReplace', {
      state: state,
      previousState: previousState                                                     
    })                                                                                 
    container.trigger(beforeReplaceEvent, [contents, options])                         
    container.html(contents)
    container.trigger('pjax:end', [null, options])
  } else {
      pjax(options)
  }

所以,现在你知道我们要做什么了!是的,只需删除除以下行之外的所有内容:

    pjax(options)

你可以走了!奇怪的是,没有人给我这个解决方案。然而,我终于自己找到了一个解决方案,我认为这将帮助很多人。

无论如何,谢谢。

无需修改源代码。您可以将pjax配置为再次从服务器加载,而不是通过将其maxCacheLength设置为0 来使用缓存

$.pjax.defaults.maxCacheLength = 0;