Pjax用法

引入类库后 在主题footer.php里添加以下代码即可

$(document).pjax('a[href^="<?php Helper::options()->siteUrl()?>"]:not(a[target="_blank"], a[no-pjax])', {
    container: '#pjax-container',
    fragment: '#pjax-container',
    timeout: 8000,
});

记坑

1.发现Pjax版本需要与Jquery版本保持某个契合度: 大概是pjax 1.9.x版本应配合jq 2.x版本; pjax2.0.x以上的版本 使用jq 3.x 才能使用, 否则bug bug~

2.标签要闭合: 如果页面上html标签没有写完整, 也会导致pjax无法生效 如没有闭合

3.pjax完成后需要重载其他类库, 如代码高亮

4.评论区错误: 点击回复按钮JS报错后, 无法将评论框定位到回复区(但是刷新一下页面, 就会恢复正常)

Uncaught ReferenceError: TypechoComment is not defined at HTMLAnchorElement.onclick
引起这个原因是: window.TypechoComment对象是typecho在head标签里调用$this->header()方法为我们生成的, Pjax加载后window.TypechoComment没有被重新载入进来. 且window.TypechoComment里的respondId 没有被重新生成.

解决方案:

在Pjax的替换#pjax-container时, 重新载入window.TypechoComment对象:

<div id="pjax-container">
    <!--commentReply=1 表示仅输出 window.TypechoComment 对象-->
    <?php $this->header('commentReply=1&description=0&keywords=0&generator=0&template=0&pingback=0&xmlrpc=0&wlw=0&rss2=0&rss1=0&antiSpam=0&atom'); ?>
</div>

5.听说要关闭反垃圾保护, 这个我没有验证过.

原文地址:
https://www.hoehub.com/JavaScript/96.html