Pjax局部无刷新技术教程
整合pjax的准备工作
检查你的网站是否引入1.7.0版本以上的jquery.js,如果没有请全局引入
//新浪CDN提速(或以下载到本地引入): <script type="text/javascript" src="http://lib.sinaapp.com/js/jquery/1.9.0/jquery.js"></script>1.7.0版本以上的才有pushState的封装。
开始整合Pjax:
1.下载pjax.js,百度网盘:http://pan.baidu.com/s/1dF9E1w9;
2.在你喜欢的位置(最好body代码结束前)引入pjax.js;
使用pjax
编辑模版footer.php在</body>标记结束前插入:
<script type="text/javascript"> $(document).pjax('a[target!=_blank]', '#contentleft', { fragment:'#contentleft', timeout:8000 }); </script>作用:绑定本页面非新窗口打开的所有本域链接,链接点击之后,替换contentleft的容器的内容为新内容contentleft,ajax超时时间8秒;
因为每个模版的替换区不同,请根据自己网站修改掉contentleft容器。
解决pjax的缓冲--加入等待动画;
pjax.js提供了两个接口;
<div class="pjax_loading"></div> <script type="text/javascript"> $(document).on('pjax:send', function() { //pjax链接点击后显示加载动画; $(".pjax_loading").css("display", "block"); }); $(document).on('pjax:complete', function() { //pjax链接加载完成后隐藏加载动画; $(".pjax_loading").css("display", "none"); }); </script>为pjax_loading定义css,这里就不作介绍。
解决pjax之后,容器中一些jq事件失效的问题
问题比如:pjax之后多说评论框不加载,ajax评论不能提交等等问题。
问题原因:原先容器绑定的事件被新容器替换掉了,新容器的div没有绑定事件,所以点击无效。
解决方法:利用pjax的加载完成回调函数,重新绑定事件。
全部代码汇总一下,就是这样:
<script type="text/javascript" src="http://lib.sinaapp.com/js/jquery/1.9.0/jquery.js"></script> <script type="text/javascript" src="你的域名/pjax.js"></script> <div class="pjax_loading"></div> <script> $(document).pjax('a[target!=_blank]', '#contentleft', {fragment:'#contentleft', timeout:8000}); $(document).on('pjax:send', function() { //pjax链接点击后显示加载动画; $(".pjax_loading").css("display", "block"); }); $(document).on('pjax:complete', function() { //pjax链接加载完成后隐藏加载动画; $(".pjax_loading").css("display", "none"); pajx_loadDuodsuo(); }); function pajx_loadDuodsuo(){ var dus=$(".ds-thread"); if($(dus).length==1){ var el = document.createElement('div'); el.setAttribute('data-thread-key',$(dus).attr("data-thread-key"));//必选参数 el.setAttribute('data-url',$(dus).attr("data-url")); DUOSHUO.EmbedThread(el); $(dus).html(el); } } </script>