pjax 是一个jQuery插件,它使用 ajax 和 pushState 来实现快速的浏览体验,包括真正的固定链接,页面标题和工作返回按钮。本文主要和大家分享jQuery pjax简单示例汇总,希望能帮助到大家。

ajax缺点是破坏了浏览器的前进后退,因为ajax的请求不会留在历史记录中。pjax就不一样了,pjax被解释成ajax+pushState的封装,因为它把ajax的请求写入历史记录,并反映在地址栏,这样用户就能愉快地使用前进后退了。pjax有好几个实现方法,这里使用最常用的jQuery库,使用jquery.pjax.js。演示代码的服务器端使用PHP脚本语言。

Pjax用在那儿?就说百度云盘吧,这个大家肯定都用过。百度云盘PC端,在点击打开某个文件夹后会打开这个文件夹下的文件,其实显示文件的这个p就用到了pjax技术。地址栏变换,内容更换,但是却是一个ajax请求。等到后退的时候,不必重新请求上一层文件夹的内容,因为是存在在历史记录中的。而且,开发者还可以选择时候使用cache和storage缓存。

示例一、

pjax

My Site

Go to 第一页.第二页

$(document).pjax('a', '#container')

res1.php

echo "

第一页

";

res2.php

echo "

第二页

";

解释:

$(document).pjax('a', '#Container') 其中 a 是触发元素, #container 是装载 pjax 返回内容的容器,下面也是这样。

示例二、

pjax

My Site

$(function(){

$('#clickMe').click(function(){

$.pjax({

url: './res3.php',

container: '#container'

});

});

});

服务器端代码:

res3.php:

echo "

第三页

";

三综合应用

window.history.pushState(state, title, url);

// https://developer.mozilla.org/zh-CN/docs/Web/API/History/pushState

// @状态对象: 记录历史记录点的额外对象,可以为空.

// @页面标题: 目前所有浏览器都不支持.

// @可选的URL: 浏览器不会检查URL是否存在,只改变URL.URL必须同域,不能跨域.

PJAX其实就是HTML5 window.history.pushState(state, title, url)这个新的API加上传统的AJAX技术,一般用来实现无刷新的页面加载.pushState的作用主要是:改变URL和添加返回历史.这样AJAX无刷新加载页面后,用户还可以正常进行后退和前进,JS的window.history.back()和window.history.forward()也能正常工作.下面就是一个用pushState + jQuery AJAX实现的无刷新的页面加载,不支持的浏览器则自动退化成打开原始的链接打开形式.

index.php:

Index

data.php

$(document).ready(function() {

$('#main').on('click','a',function(e) {

if(window.history.pushState) {

e.preventDefault(); //不跟随原链接跳转

url = $(this).attr('href');

$.ajax({

async: true,

type: 'GET',

url: 'data.php',

data: 'pjax=1',

success: function(data) {

window.history.pushState(null, null, url); //改变URL和添加返回历史

document.title = data.title; //设置标题

$('#main').html(data.main); //设置内容

}

});

} else {

return; //低版本IE8等不支持HTML5 pushState,直接返回进行链接跳转

}

});

});

data.php:

if(isset($_GET['pjax'])) {

//PJAX请求返回JSON

$arr['title'] = 'Data';

$arr['main'] = '

Data Content

';

//下面这两句是把PHP数组转成JSON对象返回

header('Content-Type: application/json; charset=utf-8');

echo json_encode($arr);

} else {

//常规请求返回HTML

?>

Data

Data Content

注意,JS统计代码应该放到main块里面才能正常统计页面访问数.

示例二:

  • >全部
  • >$vo['id']))}">{$vo.name}

$(function(){

$(document).pjax('.pjax a', '#pjax-container',{

type:'post',

scrollTo:false,

});

$(document).on('pjax:click', function() {

enable_loading = false;

})

$(document).on('pjax:send', function(){

var str = "

加载中...

";

$('#pjax-container').html(str);

})

//最后一个右侧加边框

$(".brand-news-nav ul li").last().children('a').addClass('last');

$(".brand-news-nav ul li").click(function(){

$(this).addClass('selected').siblings().removeClass('selected');

})

})

法律支持

})

服务端代码

if(is_pjax()){

$this->display('article_pjax');

}else{

$this->display('article');

}

//判断是否是pjax请求

function is_pjax(){

return array_key_exists('HTTP_X_PJAX', $_SERVER) && $_SERVER['HTTP_X_PJAX'];

}

其中的主要思想就是当.pjax a进行点击的时候,将#pjax-container的内容替换为请求后的内容。在后端处理时需要判断是否是pjax请求,如果是需要进行局部渲染,如果不是进行全部渲染。

因为pjax用到了HTML5技术,如果浏览器不支持Html5那么网站会正常进行跳转式的加载,如果支持那么只是进行局部渲染(但是浏览器地址栏中的url会正常跟着a链接进行变动)。

注意上述的js代码中在配置pjax时有个参数scrollTo:false,加上此参数表示点击连接后网页的scrollBar不会变动,如没有此参数,每次点击时浏览视窗会自动跳转到网页顶部

小结:Pjax实际就是从服务器端返回一段代码片段,而不用刷新页面,并且同时对 url 地址进行修改,这样可以节省资源加载,提升页面加载速度。

相关推荐:

php pjax案例,jQuery pjax简单示例汇总相关推荐

  1. jQuery+pjax简单示例汇总

    pjax 是一个jQuery插件,它使用 ajax 和 pushState 来实现快速的浏览体验,包括真正的固定链接,页面标题和工作返回按钮. ajax缺点是破坏了浏览器的前进后退,因为ajax的请求 ...

  2. pjax php demo,jQuery pjax 应用简单示例

    pjax 是一个jQuery插件,它使用 ajax 和 pushState 来实现快速的浏览体验,包括真正的固定链接,页面标题和工作返回按钮. ajax缺点是破坏了浏览器的前进后退,因为ajax的请求 ...

  3. php pjax案例,基于jquery.pjax实现Pjax效果详解

    pjax是对ajax + pushState的封装,ajax大家应该都明白,就是使用xmlhttprequest对象与服务端进行交换数据,pushState是一个可以操作history的api.说白了 ...

  4. jQuery ajax简单案例-验证用户名是否可用

    jQuery ajax简单案例-验证用户名是否可用 HTML <!DOCTYPE html> <html> <head> <meta charset=&quo ...

  5. jQuery设置和获取span的内容(简单示例说明)

    原文地址为: jQuery设置和获取span的内容(简单示例说明) 示例代码如下: <html> <head> <script type="text/javas ...

  6. Web API 简单示例

    一.RESTful和Web API Representational State Transfer (REST) is a software architecture style consisting ...

  7. python线程监控_Python实现线程状态监测简单示例

    本文实例讲述了Python实现线程状态监测.分享给大家供大家参考,具体如下: # -*- coding:utf-8 -*- from threading import Thread import ti ...

  8. JQuery ZTree简单使用

    JQuery ZTree简单使用 @(JavaScript)[jQuery, ztree, 入门] JQuery ZTree简单使用 基本概述 案例 使用标准json数据构造ztree 使用简单jso ...

  9. python密码登录程序三次_Python实现账号密码输错三次即锁定功能简单示例

    本文实例讲述了Python实现账号密码输错三次即锁定功能.分享给大家供大家参考,具体如下: 初学Python-1 #实现账号输错三次即锁定 user = "hubery" pass ...

最新文章

  1. 计算机技术的演进过程
  2. python解包裹_关于Python中包裹传参和解包裹的理解
  3. rsync+inotify一键安装脚本
  4. Oracle 技巧篇-快速批量删除当前数据库连接的用户,一键清空所有session会话方法
  5. 德国大学:如何改变一个民族和整个世界的命运
  6. CentOS7 设置防火墙端口
  7. 七月算法机器学习 7 工作流程与模型调优 Kaggle案例泰坦尼克号问题
  8. 算法: 用队列Queue实现栈Stack
  9. mysql数据库两表建立联系_在MySQL数据库建立多对多的数据表关系
  10. 用户画像算法分享和干货推荐
  11. 度假村酒店官方网站模板里面包含7个子页面,适合酒店住宿网站模板下载
  12. MFC使用SaveAs函数保存Excel文件时,弹出“文件已存在”问题
  13. Pandas写入Excel文件如何避免覆盖已有Sheet
  14. 各种风格简洁单页响应式html5模板_简洁 响应式 单页 跳转 设计 案例 源码340多套订餐企业模板高大尚响应式网站模板html5网页静态模板Bootstrap扁平化网站源码css3手机seo自适响
  15. 我的Python学习之路(5)
  16. EAUML日拱一卒-状态图::基本要素画法
  17. std::thread介绍
  18. 二十一世纪大学英语读写教程(第三册)学习笔记(原文)——2 - The Titanic Puzzle(泰坦尼克难题——女权主义者应该接受优先坐上救生艇吗)
  19. mqtt断开自动重连
  20. 兰卡斯特的计算机科学与技术,兰卡斯特大学计算机专业好吗

热门文章

  1. 微软用户服务器ldap,如何处理 LDAP 服务器 Cookie
  2. java assert false_Java陷阱之assert关键字
  3. java 随机数生成算法_Java随机数的生成算法
  4. 手把手教你玩转直流电机PID双环控制
  5. iphone 视频播放m3u8问题
  6. 科学认识手机充电问题
  7. 44.(leaflet之家)leaflet暗色系地图样式地图(获取滤镜值)
  8. acwing1562 微博转发(宽搜)
  9. 基于jsp、ssm手机商城系统
  10. vue 点击切换导航标签,并左右滚动