Pjax.js防刷新技术
自我感觉良好,所以拿出现在自己用的 Pjax.js 分享给大家
当然 这个版本是 经过本人修改后的版本,跟其它 拿过来就用的 不一样 而且区别还不小
大多的 Pjax 都是 跟后台无关的,而这个版本是跟后台有密切联系的
下面就是说下 代码 以及使用方法,包括后台 内容输出格式
先说说方法吧
- 引入 jQuery + Pjax.js (本站提供的代码)
- 下面就关键 运行代码 所接受的参数详解
- selector: 绑定 Pjax 的链接 默认:"a[href]"
- container: 替换内容的容器的 jQuery 选择字符串 (非必须,一定很惊讶,这里其实就是传递给后台,需要什么内容,具体的替换是 安后台返回的替换) 默认: “#content”
- timeout: ajax 获取内容超时时间 单位:毫秒 默认:9000
- cache: 本地缓存时间有效期:单位: 秒 默认: false (不缓存)
- titleSuffix: 标题后缀 可以废除的参数 暂时保留
- filter: 是对 selector 的补充,也就是 对于不想 Pjax 的链接 返回 true,将用默认方式打开链接
- callback: Pjax 处理完毕的回调函数, 页面需重新 运行的代码 (如幻灯; 或者其他 需再次运行的 JS 代码)
- 后台的返回数据解析 返回的是 JSON 数据,在后台 PHP 处理之前肯定是 Array (数组) 这里为了方便就以数组介绍 最后只需 用 json_encode($arr); 输出
下面一个一个的介绍 用途:- code: 返回码 必须 正常 为 200,出现错误的时候任意
- msg: 返回消息提示 当 code 不等于 200 的时候输出消息,可以用于 ajax 评论失败时候 的提示
- title: 当前页面标题,用于前台输出
- html: 这里是输出的 数组 键名就是 前台的 内同替换容器 内容就是 容器内需要替换的 HTML,前台更新内容就根据此处内容为准
- scriptStr: 需要运行的 JS 代码 字符串形式: 其中可用的 {url}, {title}, {pjax} 在前台运行的时候 分别替换为 网址 标题 与 pjax 状态 (可以是 state cache ajax)
- 后台判断当前请求是否为 Pjax 可以通过头文件判断 $_SERVER['HTTP_X_PJAX'], 而 $_SERVER['HTTP_X_PJAX_CONTAINER'] 这是存储前台 JS 设置的 container (可有可无)
要用了解的东西是真是不少
但好在是 自己写的比较熟悉了
接着就是代码部分了 JS 示例:
$.pjax({
selector: 'a[href^="'+ BLOG_URL +'"]:not("[ja_link],[no-pjax]")',
container: "#main,.top", /* 替换 HTML 的选择器 */
cache: false, /* 缓存时间 单位: 秒 默认: false (不缓存) */
top: 0, /* 滚动条偏移 默认为 0 */
filter: function(u, e) { /* 复杂的筛选器 返回 true 不需要 Pjax */
if (/admin\/|rss\.php/i.test(u)) return true;
},
callback: pjaxCallback
});
$(document)
// 提交方式 为 GET 的表单 用 Pjax 处理
.on('submit', 'form[method=get]', function(){
var $t = $(this);
$.pjax.pjaxGet($t.attr("action") +'?'+ $t.serialize());
return false;
})
// #commentform 表单 EMLOG 默认 评论表单 (EMLOG 评论需修改 评论失败提示用 msg 返回)
.on('submit', '#commentform', function(){
var $t = $(this), pid = $t.find('input[name=pid]').val();
// 获取 评论后需要滚动到的位置 如果为 直接评论文章 就获取 评论列表 #comments 高度
if(pid == 0)
var top = $('#comments').offset().top
else
// 如果 为回复其它评论 就获取 被回复评论 高度
var top = $("#comment-" + pid).offset().top
$.pjax.pjaxGet($t.attr("action"), $t.serialize(), {
url: document.location.href,
title: document.title,
top: top - 20
});
return false;
})
接着就是 PHP 后台对于 Pjax 请求输出的栗子:
die(json_encode(array(
'code' => 200,
'msg' => false,
'html' => array(
'.top' => 'class=top 输出内容 本人博客 此处是 幻灯,如果不是首页 不需要输出幻灯的话,输出 空内容即可',
'#main' => '这里是 id=main 的 HTML 内容'
),
'title' => 'CSS 样式练习 - 简爱', // 页面标题 // 需要你运行的 JS 代码 这里是 Piwik 的 Ajax 统计 与自定义变量 用于统计 Pjax 事件
'scriptStr' => '
_paq.push(["setCustomVariable", 1, "pjax", "{pjax}", "page"]);
_paq.push(["setCustomUrl", "{url}"]);
_paq.push(["trackPageView", "{title}"]);'
)));
Pjax.js防刷新技术的更多相关文章
- js防刷新的倒计时
近期在维护考试系统,在进行考试測试时无意中点击了刷新button.可是上面的倒计时并没有受到影响.同一时候在几篇博客中也有这种样例,所以我想看看它究竟是如何防止刷新的. 假设是用cs代码写.我们可能会 ...
- js 等待刷新技术
- jquery.pjax.js bug问题解决集锦
jquery.pjax 是一个很好的局部刷新插件,但实际应用过程是还是会有很多小问题,部分问题解决如下: 1.pjax 局部加载时候,IE 存在缓存问题,很容易理解,pjax是通过jquery的aja ...
- 使用 pjax 实现无刷新切换页面
一.目的 1.当打开链接的时候,页面是淡入显示,并且页面顶部会显示加载进度条,页面显示完成时,进度条加载满并且消失. 2.点击页面上的 a 标签时,显示加载进度条,并且当前页面淡出消失,当前页面淡出消 ...
- emlog通过pjax实现无刷新加载网页--完美解决cnzz统计和javascript失效问题
想要更详细了解pjax,需要查看官网 或者看本站文章:jQuery.pjax.js:使用AJAX和pushState无刷新加载网页(官网教程中文翻译) 效果看本站,音乐无刷新播放,代码高亮和复制js加 ...
- JS定时刷新页面及跳转页面
JS定时刷新页面及跳转页面 Javascript 返回上一页1. Javascript 返回上一页 history.go(-1), 返回两个页面: history.go(-2); 2. history ...
- 【转】Android 防破解技术简介
http://www.cnblogs.com/likeandroid/p/4888808.html Android 防破解技术简介 这几年随着互联网的不断发展,Android App 也越来越多!但是 ...
- JS实现刷新iframe的方法
<iframe src="1.htm" name="ifrmname" id="ifrmid"></iframe> ...
- js操纵cookie技术
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"% ...
随机推荐
- Effective Java 44 Write doc comments for all exposed API elements
Principle You must precede every exported class, interface, constructor, method, and field declarati ...
- mac下 ssh免密码登陆设置
由于mac os 是基于unix的操作系统终端和linux非常类似,所以不用借助类似于windows下的putty 和CRT工具即可远程登陆linux服务器,只需简单地3步即可免密码ssh远程. 1 ...
- 【转载】kafka的工作原理
http://www.ibm.com/developerworks/cn/opensource/os-cn-kafka/index.html 消息队列 消息队列技术是分布式应用间交换信息的一种技术.消 ...
- hiveserver2 with kerberos authentication
Kerberos协议: Kerberos协议主要用于计算机网络的身份鉴别(Authentication), 其特点是用户只需输入一次身份验证信息就可以凭借此验证获得的票据(ticket-grantin ...
- 瓶颈生成树与最小生成树 POJ 2395 Out of Hay
百度百科:瓶颈生成树 瓶颈生成树 :无向图G的一颗瓶颈生成树是这样的一颗生成树,它最大的边权值在G的所有生成树中是最小的.瓶颈生成树的值为T中最大权值边的权. 无向图的最小生成树一定是瓶颈生成树,但瓶 ...
- jQuery时间轴插件:jQuery Timelinr
前言 这是一款可用于展示历史和计划的时间轴插件,尤其比较适合一些网站展示发展历程.大事件等场景.该插件基于jQuery,可以滑动切换.水平和垂直滚动.支持键盘方向键.经过扩展后可以支持鼠标滚轮事件. ...
- css3中box-flex的使用
语法: box-flex:<number> 其中number取值:使用浮点数指定对象所分配其父元素剩余空间的比例.设置或检索伸缩盒对象的子元素如何分配其剩余空间. html代码: < ...
- HDU 5033 Building --离线+单调栈
题意:给一些建筑物,x表示横坐标,h表示高度,然后查询某些坐标x,问从该点看向天空的最大张角是多大. 解法:离线操作,读入所有数据,然后按x升序排序,对每一个查询的x,先从左到右,依次添加x坐标小于x ...
- FZU1894 志愿者选拔 --单调队列
做法:维护一个单调递减序列,只需输出序列中的第一个元素即可. 对于命令我们可以进行不同的处理: 如果是Q命令,则判断当前队列中是否仍有元素,如果没有则输出-1,如果有则直接输出队首. 如果是G命令,则 ...
- CSU 1060 Nearest Sequence
题意:求三个序列的最长公共子序列. 思路:一开始以为只要求出前两个的LCS,然后和第三个再求一遍LCS就是答案了.但是样例就对我进行啪啪啪打脸了.实际上就跟两个序列的差不多,换成三维的就行了. 代码: ...