使用 Pjax 无刷新 AJAX 异步加载网页

发布于 2018-07-16 15:12:24 字数 2829 浏览 2423 评论 0

Pjax 是一个比较好的插件,通过简单的配置,可以实现无刷新加载我们的网页,搭配一些 Loading 加载动画,即可完美的提升我们网站的用户体验。

整合 pjax 的准备工作

检查你的网站是否引入 1.7.0 版本以上的 jquery.js,如果没有请全局引入

1.新浪CDN提速
<script type="text/javascript" src="http://lib.sinaapp.com/js/jquery/1.9.0/jquery.js"></script>
2.下载本地化jq(本文底部)
<script type="text/javascript" src="....自己写...../jquery.js"></script>

1.7.0 版本以上的才有 pushState 的封装。

开始整合 Pjax

下载 pjax.js

在你喜欢的位置(最好body代码结束前)引入pjax.js

使用 pjax

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

$(document).pjax('a[target!=_blank]', '#contentleft', {fragment:'#contentleft', timeout:8000});

这句话是什么意思呢?

绑定本页面非新窗口打开的所有本域链接,链接点击之后,替换 contentleft 的容器的内容为新内容 contentleft,ajax 超时时间 8 秒;

因为每个模版的替换区不同,修改掉 contentleft 容器保存。

现在看看,是否可以无刷新加载了?

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

pjax.js提供了两个接口;

<div class="pjax_loading"></div>
<script>
$(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 之后 jQuery 事件失效的问题

原先绑定的事件被新元素替换掉了,新元素没有绑定事件,所以点击无效,利用pjax的加载完成回调函数,重新绑定事件即可。

$(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 src="http://lib.sinaapp.com/js/jquery/1.9.0/jquery.js"></script> 
<script 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>

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据

关于作者

JSmiles

生命进入颠沛而奔忙的本质状态,并将以不断告别和相遇的陈旧方式继续下去。

0 文章
0 评论
84961 人气
更多

推荐作者

qq_aHcEbj

文章 0 评论 0

寄与心

文章 0 评论 0

13545243122

文章 0 评论 0

流星番茄

文章 0 评论 0

春庭雪

文章 0 评论 0

潮男不是我

文章 0 评论 0

    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文