jQuery Address全站 AJAX 完整案例详解
本文详细介绍如何利用 jQuery 框架以及 jQuery Address 插件实现最基本的全站 AJAX 动态加载页面内容的功能的方法。
案例目标
以常见基本结构的网站为案例,实现全站链接 AJAX 加载页面内容,不刷新页面,不影响seo/seo.html" target="_blank">搜索引擎收录。同时兼容 WordPress。
功能实现
需要提供给 jQuery Address 的有三个常量,分别是:
代码如下 复制代码
var baseurl = 'http://www.example.com/test/blog',
request_uri = '/test/blog/',
request_uri_host = 'http://www.example.com';
当网站根目录处于域名根目录时,三个常量的定义为:
代码如下 复制代码
var baseurl = 'http://www.111cn.net',
request_uri = '/',
request_uri_host = 'http://www.111cn.net';
以上定义这几个常量数据中的斜杠符非常重要,有误将导致通站 AJAX 链接不能工作。
主体功能实现程序如下:
代码如下 复制代码
// 全局变量:初始化完成标记
var is_loaded = false;
;(function($) {
$(document).ready( function() {
// 初始化 jQuery Address
$.address.state( request_uri_host ).init( function() {
// 绑定所有需要的链接,此处筛除了 WordPress 内部功能链接、Feed 订阅链接,以及新窗口链接
$("a[href^='"+baseurl+"']:not([href*='/wp-admin/']):not([href*='/wp-login.php']):not([href$='/feed/']):not([target='_blank'])")
.address();
// 当 URL 发生改变时的事件
} ).change( function(e) {
// 防止初始化时多余 AJAX 加载当前页面
if( is_loaded )
// AJAX 加载所点击的页面内容
my_load_page( $.address.state() + e.path );
is_loaded = true;
} );
// 页面初始化 JS 程序
my_init_after_ajax();
} );
})(jQuery);
// AJAX 获取新页面内容过程
function my_load_page( url ) {
// 显示 Loading 层
$('#loading').fadeIn();
// 调用 jQuery AJAX
$.ajax({
url: url, type: 'GET', dataType: 'html',
beforeSend: function() {},
success: function(data, textStatus, XMLHttpRequest) {
// 人性化淡入淡出并适时替换 #all 层内容,此处可以调整为所需的动画效果
$('#all').stop(true,false).animate( {'opacity': 0}, 500, function() {
$('html, body').scrollTop(0);
$('#all').html('').append( $('<div>'+data+'</div>').find('#all').html() )
.stop(true,fals(www.111cn.net)e).animate( {'opacity': 1}, 500 );
// ... 除了修改 #all 层内容,此处还可以修改其它层以及 <title> 等
// 页面初始化 JS 程序
my_init_after_ajax();
} );
}
});
}
//页面初始化 JS 程序
function my_init_after_ajax() {
// 隐藏 Loading 层
$('#overlay').fadeOut();
// ... 各种页面初始化 JS 程序
}
WordPress + jQuery Address
应用于 WordPress 中,除了主体 JS 程序可以直接放入 Theme 的 JS 文件中,常量的定义需要 WordPress Theme PHP 传递给前台。实现方法如下:
代码如下 复制代码
// WordPress 加载 JS/CSS 文件回调过程,一般位于 Theme 的 functions.php 或其它包含文件
function my_enqueue_scripts_frontend() {
// 加载 Theme 主样式表 style.css 文件
wp_enqueue_style( 'all', get_stylesheet_uri() );
wp_enqueue_script( 'jquery' );
wp_enqueue_script( 'jquery.address', get_stylesheet_directory_uri() . '/js/jquery.address.min.js', array( 'jquery' ) );
wp_enqueue_script( 'all', get_stylesheet_directory_uri() . '/js/all.js', array( 'jquery' ), false, true );
// 开启前端评论嵌套回复功能
if ( is_singular() ) wp_enqueue_script( 'comment-reply' );
// 传递 JS 变量给已加载的名为 'all' 的 JS 程序,并封装在 'theme' 对象中
wp_localize_script( 'all', 'theme', array(
'baseurl' => home_url(),
'request_uri' => $_SERVER['REQUEST_URI'],
'request_uri_host' => ( ( isset( $_SERVER['HTTPS'] ) && $_SERVER['HTTPS'] == 'on' ) ? 'https://' : 'http://' ) . $_SERVER['HTTP_HOST'],
// 此处仍可传递其它实际需要的参数,如调用 WordPress 内置 AJAX 功能、调用 Theme 元素文件 URI 等
// 'ajaxurl' => admin_url( 'admin-ajax.php' ),
// 'tplurl' => get_stylesheet_directory_uri(),
) );
}
add_action( 'wp_enqueue_scripts', 'my_enqueue_scripts_frontend' );
此 WordPress 案例 Theme 前端 /js/all.js 程序如下:
代码如下 复制代码
if( 'undefined' != typeof theme )
var baseurl = theme.baseurl,
request_uri = theme.request_uri,
request_uri_host = theme.request_uri_host;
// ... JS 程序
from:http://www.111cn.net/wy/jquery/49267.htm
jQuery Address全站 AJAX 完整案例详解的更多相关文章
- ajax方法参数详解与$.each()和jquery里面each方法的区别
JQuery中$.ajax()方法参数详解 url: 要求为String类型的参数,(默认为当前页地址)发送请求的地址. type: 要求为String类型的参数,请求方式(post或get)默认为g ...
- jQuery基础入门+购物车案例详解
jQuery是一个快速.简洁的JavaScript代码库(或JavaScript框架).jQuery设计的宗旨是"write Less,Do More",即倡导写更少的代码,做更多 ...
- MVC之Ajax.BeginForm使用详解之更新列表 mvc验证jquery.unobtrusive-ajax
MVC之Ajax.BeginForm使用详解之更新列表 1.首先,请在配置文件设置如下:(该项默认都存在且为true) <add key="UnobtrusiveJavaScrip ...
- $.ajax()所有参数详解
原文:https://www.cnblogs.com/everest33Tong/p/6159700.html [一]$.ajax()所有参数详解 url: 要求为String类型的参数,(默认为当前 ...
- http500:服务器内部错误案例详解(服务器代码语法错误或者逻辑错误)
http500:服务器内部错误案例详解(服务器代码语法错误或者逻辑错误) 一.总结 服务器内部错误可能是服务器中代码运行的时候的语法错误或者逻辑错误 二.http500:服务器内部错误案例详解 只是一 ...
- jQuery中getJSON跨域原理详解
详见:http://blog.yemou.net/article/query/info/tytfjhfascvhzxcytp28 jQuery中getJSON跨域原理详解 前几天我再开发一个叫 河蟹工 ...
- 第7.13节 案例详解:Python类变量
第7.13节 案例详解:Python类变量 上节介绍了类变量的定义和使用方法,并举例进行了说明.本节将通过一个更完整的例子来说明. 一. 定义函数dirp def dirp(iter): ret ...
- 第7.27节 Python案例详解: @property装饰器定义属性访问方法getter、setter、deleter
上节详细介绍了利用@property装饰器定义属性的语法,本节通过具体案例来进一步说明. 一. 案例说明 本节的案例是定义Rectangle(长方形)类,为了说明问题,除构造函数外,其他方法都只 ...
- spring的IOC,DI及案例详解
一:spring的基本特征 Spring是一个非常活跃的开源框架:它是一个基于Core来架构多层JavaEE系统的框架,它的主要目的是简化企业开发.Spring以一种非侵入式的方式来管理你的代码,Sp ...
随机推荐
- 【noip模拟赛9】123法典
描述 很久很久以前,有个叫123的国家,这个国家的国王很喜欢颁布各种法令,并把这些法令记录在一部<123法典>中.最近这部法典终于被发掘了出来,专家们经过研究发现法典中的法令是按颁布的时间 ...
- Maven启动代理访问
1.说明 如果你的公司正在建立一个防火墙,并使用HTTP代理服务器来阻止用户直接连接到互联网.如果您使用代理,Maven将无法下载任何依赖. 为了使它工作,你必须声明在 Maven 的配置文件中设置代 ...
- (转)python中调用R语言通过rpy2 进行交互安装配置详解
python中调用R语言通过rpy2 进行交互安装配置详解(R_USER.R_HOME配置) 2018年11月08日 10:00:11 luqin_ 阅读数:753 python中调用R语言通过r ...
- [OpenCV-Python] OpenCV 中机器学习 部分 VIII
部分 VIII机器学习 OpenCV-Python 中文教程(搬运)目录 46 K 近邻(k-Nearest Neighbour ) 46.1 理解 K 近邻目标 • 本节我们要理解 k 近邻(kNN ...
- 配置多个数据源,spring profile 多环境配置管理
针对生产环境,测试环境,以及本地调试开发有时会配置多套数据库,在一个数据配置文件进行修改,往往有时发布到生成环境会忘记修改,或者本地调试时还是生产环境的库,会导致生产环境数据被污染. ps--刚开始配 ...
- laravel 控制器使用MODEL
第一步:引入MODEL类 use App\Http\Models\Sysdba; 第二步:使用 $uid = $request->input('uid'); 方法1. $model = new ...
- hdu 2063 过山车【匈牙利算法】(经典)
<题目链接> RPG girls今天和大家一起去游乐场玩,终于可以坐上梦寐以求的过山车了.可是,过山车的每一排只有两个座位,而且还有条不成文的规矩,就是每个女生必须找个个男生做partne ...
- python中confIgparser模块学习
python中configparser模块学习 ConfigParser模块在python中用来读取配置文件,配置文件的格式跟windows下的ini配置文件相似,可以包含一个或多个节(section ...
- python 文本分类
python 文本分类 pyhton 机器学习 待续...
- LOJ.116.[模板]有源汇有上下界最大流(Dinic)
题目链接 http://blog.csdn.net/just_sort/article/details/75448403 有源汇有上下界网络流 通过添加一条(T->S,[0,INF])的边变成无 ...