emlog通过pjax实现无刷新加载网页--完美解决cnzz统计和javascript失效问题

想要更详细了解pjax,需要查看官网

或者看本站文章:jQuery.pjax.js:使用AJAX和pushState无刷新加载网页(官网教程中文翻译)

效果看本站,音乐无刷新播放,代码高亮和复制js加载成功~

准备文件

编辑模板 header.php 的 head 添加必要文件:

jquery-1.11.1.min.js百度网盘下载

jquery.pjax-1.8.2.min.js百度网盘下载

下载到模板的 scripts 目录下后将下面两句添加到</head>所有script标签的最前面:

点击预览

<script type="text/javascript" src="<?php echo TEMPLATE_URL; ?>scripts/jquery-1.11.1.min.js"></script>
<script type="text/javascript" src="<?php echo TEMPLATE_URL; ?>scripts/jquery.pjax-1.8.2.min.js"></script>

注意:jQuery需要1.7.0版本以上的才有pushState的封装

使用pjax

编辑模版 footer.php 在/body标记结束前插入:

< script  type="text/javascript">
 $(document).pjax(‘a[target!=_blank]‘, ‘#contentleft‘, {fragment: ‘#contentleft‘,timeout: 8000}); 
 < /script>

参数解释:

  1. a[target!=_blank]:绑定本页面非新窗口打开的所有链接
  2. #contentleft:链接点击之后,仅仅更新#contentleft容器的内容,页面其他内容不变,需自行修改这个参数
  3. fragment:‘#contentleft‘:#contentleft选择器的碎片从Ajax响应提取
  4. timeout:8000:Ajax超时时间为8秒,如果未响应则直接刷新网页

注意:这个 #contentleft 怎么找呢?

小指的方法是打开模板的 echo_log.php,找到包裹文章页面的 div 的 id 就是了,一般是第一第二个

id 名字都是 contentleft,content或者main之类的,按照这个方法一般都可以了,如果不行回我吧~

解决pjax的缓冲--加入等待动画

编辑模板 footer.php 在/body标记前插入下面代码

点击预览

<div class="qingzz_pjax_loading">
    <div class="qingzz_pjax_spinner">
        <div class="qingzz_pjax_rect1"></div>
	<div class="qingzz_pjax_rect2"></div>
	<div class="qingzz_pjax_rect3"></div>
	<div class="qingzz_pjax_rect4"></div>
	<div class="qingzz_pjax_rect5"></div>
    </div>
</div>
<script>
$(document).on(‘pjax:send‘, function() { //pjax链接点击后显示加载动画;
    $(".qingzz_pjax_loading").css("display", "block");
});
$(document).on(‘pjax:complete‘, function() { //pjax链接加载完成后隐藏加载动画;
    $(".qingzz_pjax_loading").css("display", "none");
});
</script>

没有用音乐插件的需要在模板css文件末尾添加css:

.qingzz_pjax_loading {
	height: 100%;
	width: 100%;
	position: fixed;
	top: 0;
	left: 0;
	z-index: 1000;
	background-color: rgba(90,90,90,.5);
	display: none;
}
.qingzz_pjax_spinner {
  margin: 300px auto;
  width: 50px;
  height: 60px;
  text-align: center;
  font-size: 10px;
}
.qingzz_pjax_spinner > div {
  background-color: #67CF22;
  height: 100%;
  width: 6px;
  display: inline-block;
  -webkit-animation: stretchdelay 1.2s infinite ease-in-out;
  animation: stretchdelay 1.2s infinite ease-in-out;
}
.qingzz_pjax_spinner .qingzz_pjax_rect2 {
  -webkit-animation-delay: -1.1s;
  animation-delay: -1.1s;
}
.qingzz_pjax_spinner .qingzz_pjax_rect3 {
  -webkit-animation-delay: -1.0s;
  animation-delay: -1.0s;
}

.qingzz_pjax_spinner .qingzz_pjax_rect4 {
  -webkit-animation-delay: -0.9s;
  animation-delay: -0.9s;
}
.qingzz_pjax_spinner .qingzz_pjax_rect5 {
  -webkit-animation-delay: -0.8s;
  animation-delay: -0.8s;
}
@-webkit-keyframes stretchdelay {
  0%, 40%, 100% { -webkit-transform: scaleY(0.4) }
  20% { -webkit-transform: scaleY(1.0) }
}
@keyframes stretchdelay {
  0%, 40%, 100% {
    transform: scaleY(0.4);
    -webkit-transform: scaleY(0.4);
  }  20% {
    transform: scaleY(1.0);
    -webkit-transform: scaleY(1.0);
  }
}

刷新一下,挺酷的吧~

解决无法提交和多说不加载问题:

编辑模板的 footer.php,在/body标签前添加下面这段代码:

点击预览

<script>
$(document).on(‘submit‘, ‘form‘, function(event) {// 解决提交失效问题
    $.pjax.submit(event, ‘#contentleft‘, {fragment: ‘#contentleft‘,timeout: 8000});
 });
$(document).on(‘pjax:complete‘, function() {
    pajx_loadDuodsuo();//pjax加载完成之后调用重载多说函数
});
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>

里面的#contentleft一样需要改成前面的容器id哦~

总结footer.php需要添加的代码:

点击预览

<div class="qingzz_pjax_loading">
    <div class="qingzz_pjax_spinner">
        <div class="qingzz_pjax_rect1"></div>
	<div class="qingzz_pjax_rect2"></div>
	<div class="qingzz_pjax_rect3"></div>
	<div class="qingzz_pjax_rect4"></div>
	<div class="qingzz_pjax_rect5"></div>
    </div>
</div>
<script>
// 绑定链接和容器
$(document).pjax(‘a[target!=_blank]‘, ‘#contentleft‘, {fragment: ‘#contentleft‘,timeout: 8000}); 
$(document).on(‘submit‘, ‘form‘, function(event) {// 解决提交失效问题
    $.pjax.submit(event, ‘#contentleft‘, {fragment: ‘#contentleft‘,timeout: 8000});
 });
$(document).on(‘pjax:send‘, function() { //pjax链接点击后显示加载动画;
    $(".qingzz_pjax_loading").css("display", "block");
});
$(document).on(‘pjax:complete‘, function() { //pjax链接加载完成后隐藏加载动画;
    $(".qingzz_pjax_loading").css("display", "none");
    pajx_loadDuodsuo();//pjax加载完成之后调用重载多说函数
});
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>

解决容器中javascript事件失效的问题:重点

问题:pjax之后多说评论框不加载,ajax评论不能提交等等问题。

问题原因:原先容器绑定的事件被新容器替换掉了,新容器的div没有绑定事件,所以点击无效。

解决方法一:利用pjax的加载完成回调函数,重新绑定事件。

解决方法二:将javascript添加到 echo_log.php 的容器,一般加到容器末尾,即/div标签上面。

更准确的方法查看本站文章:

pjax javascript失效解决(小指亲测)

将javascript添加到 echo_log.php 的容器

原理是容器里面的内容是会刷新重新加载的,所以把javascript放在这里会重新加载~

这里只列出常用的,其他具体的自行摸索添加吧~

最好放到容器末尾/div前面哦~

解决代码高亮问题添加:

<script src="<?php echo BLOG_URL; ?>admin/editor/plugins/code/prettify.js" data-no-instant></script>
<script>prettyPrint();</script>

解决CNZZ统计问题,前面是解释具体方法在最后:

pjax CNZZ统计失效解决(小指亲测)

解决百度统计问题:

pjax 百度统计失效解决(小指亲测)

好啦,完美解决了吧,哈哈哈^_^

时间: 2024-10-27 13:16:33

emlog通过pjax实现无刷新加载网页--完美解决cnzz统计和javascript失效问题的相关文章

无刷新加载评论

服务器端 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 <%@ WebHandler Language="C#" Class= "PostComment" %> using System; using System.Web; using System.Text; public class PostComment : IHttpHandler {         publ

瀑布流AJAX无刷新加载数据列表--当页面滚动到Id时再继续加载数据

瀑布流加载显示数据,在当下已经用的很普遍,尤其是我们在做网上商城时,在产品列表页面已经被普遍使用. 对于实现瀑布流布局的解决方案主要有以下两种方式: 1.对每一条显示数据使用绝对定位+浮动的方式,这样也会有一个问题----必须要知道每一条信息的具体高宽度 2.采用列布局,将每一条数据依次放置到每一列 其实两者的实现原理都是大同小异,现在我将针对第二种解决方案,用一个具体的事例来说明 ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 2

jquery完成界面无刷新加载登陆注册

昨天公司说官网的登陆注册每次要跳转到另一个界面,能不能做一个简单的,在界面弹出一个框框登陆,我想了想做了这么一个案例,大家来看看成不成 贴上代码,实现了在同一个弹出窗上加载了登陆注册功能!可自由点击!当然样式丑了一些!还请见谅!demo在下面 1这里是html内容 1 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1

ajax实现下拉菜单无刷新加载更多

1 $(function() { 2 var page = 1; 3 var discount = $('#discount'); 4 var innerHeight = window.innerHeight; 5 var timer2 = null; 6 $.ajax({ 7 url: '/lightapp/marketing/verify/apply/list?page=1', 8 type: 'GET', 9 dataType: 'json', 10 timeout: '1000', 11

thinkphp5.0调用ajax无刷新加载数据

控制器层那边就是调数据返回,这里不再赘述,视图层页面ajax部分写法如下 1 function shanchu(obj) 2 { 3 var code = $(obj).attr("code"); 4 5 $.ajax({ 6 url:"/index400/Test/sc", 7 data:{code:code}, 8 type:"POST", 9 dataType:"TEXT", 10 success: function(d

jquery+ajax无刷新加载数据,新闻浏览更多

<script type="text/javascript"> $(document).ready(function (){ $(window).scroll(function(){ var page = 1; totalheight = parseFloat($(window).height()) + parseFloat($(window).scrollTop()); if($(document).height() <= totalheight){ page++;

xcode7和ios9下UIWebView不能加载网页的解决方法

错误描述: App Transport Security has blocked a cleartext HTTP (http://) resource load since it is insecure. Temporary exceptions can be configured via your app‘s Info.plist file. 在iOS9 beta中,苹果将原http协议改成了https协议,使用 TLS1.2 SSL加密请求数据. 解决方法: 在info.plist 加入k

探真无阻塞加载javascript脚本技术,我们会发现很多意想不到的秘密

原文:探真无阻塞加载javascript脚本技术,我们会发现很多意想不到的秘密 下面的图片是我使用firefox和chrome浏览百度首页时候记录的http请求 下面是firefox: 下面是chrome: 在浏览百度首页前我都将浏览器的缓存全部清理掉,让这个场景最接近第一次访问百度首页的情景. 在firefox的请求瀑布图里有个表现非常之明显:就是javascript文件下载完毕后,有一段时间是没有网络请求被处理的,这段时间过后http请求才会接着执行,这段空闲时间就是所谓的http请求被阻塞

性能优化之无阻塞加载脚步方法比较

秋招结束了~~,好像偷懒了很久,没更博了.总结一下自己近来看书的内容. 说明一下,内容大部分来自<高性能网站建设进阶指南>. 乱入内容 Web应用和传统桌面应用有一个共同的目标:尽可能快地响应用户输入. 怎样才算是快?Jakob Nielsen是Web可用性领域知名且备受推崇的专家,引用他的观点来说就是:如果JavaScript代码执行时间超过了0.1秒,页面将会给人不够平滑快捷的感觉,如果执行时间超过了1秒,则会感到应用程序缓慢,超过了10秒,那么用户将会非常沮丧. 性能分析器:Firebu