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 ...
随机推荐
- Python Mysql_db对数据查询进行处理
引用自:https://www.cnblogs.com/itdyb/p/5700614.html 一.脚本如下 #!/usr/bin/python2.7# coding=utf-8import tim ...
- 为Kubernetes集群部署本地镜像仓库
目录贴:Kubernetes学习系列 经过之前两篇文章:Centos7部署Kubernetes集群.基于kubernetes集群部署DashBoard,我们基本上已经能够在k8s的集群上部署一个应用了 ...
- BZOJ3224 洛谷3369 Tyvj 1728 普通平衡树 splay
欢迎访问~原文出处——博客园-zhouzhendong 去博客园看该题解 题目传送门 - BZOJ3224 题意概括 您需要写一种数据结构(可参考题目标题),来维护一些数,其中需要提供以下操作:1. ...
- php字符串截取
保留字符串前面的 substr($str,start[,$length]); start 为负数 则从后面开始截取 leng为负数则返回的字符串将从 $str 结尾处向前数第 start 个字符开始 ...
- Springboot 2.0.x 集成基于Centos7的Redis集群安装及配置
Redis简介 Redis是一个基于C语言开发的开源(BSD许可),开源高性能的高级内存数据结构存储,用作数据库.缓存和消息代理.它支持数据结构,如 字符串.散列.列表.集合,带有范围查询的排序集,位 ...
- VB定义变量
定义变量可以使用显式或隐式两种方式定义: 1.显式定义:Dim 变量名 As 类型 2.隐式定义:使用类型说明符 类型说明符如下: %——整型 &——长整型 !——单精度浮点数 #——双精度浮 ...
- Codeforces757E.Bash Plays With Functions(积性函数 DP)
题目链接 \(Description\) q次询问,每次给定r,n,求\(F_r(n)\). \[ f_0(n)=\sum_{u\times v=n}[(u,v)=1]\\ f_{r+1}(n)=\s ...
- [NOIp2013普及组]车站分级
思路: 对于每一趟车,将区间内所有经停的站和所有未经停的站连一条边,表示前者优先级一定高于后者,然后用Kahn跑一遍拓扑排序即可.然而这样会创造大量多余的边,会TLE1个点.考虑一种优化:因为每趟车本 ...
- php 去重
对于二维数组咱们分两种情况讨论,一种是因为某一键名的值不能重复,删除重复项:另一种因为内部的一维数组不能完全相同,而删除重复项,下面举例说明: ㈠因为某一键名的值不能重复,删除重复项 <?ph ...
- Oracle 删除重复数据只留一条(转)
转自:http://www.cnblogs.com/252e/archive/2012/09/13/2682817.html 查询及删除重复记录的SQL语句 1.查找表中多余的重复记录,重复记录是 ...