一般我们使用浏览器提交新请求或者数据,都会刷新页面,比如在 WordPress 博客中你要查看下一页的内容,需要刷新页面。 ajax 技术即可以实现异步提交数据,使用 ajax,你可以不刷新页面也可以加载下一页的内容。当然本篇教程并不是讲解 ajax 技术的,如果你不会使用 ajax 技术,建议参考 w3school 的相关文档:http://www.w3school.com.cn/ajax/。

ajax 原理很简单,通过 js 提交请求,然后服务器上处理请求,再输出数据,浏览器接收数据,并显示。所以 ajax 在网页上需要 js 代码,我们一般使用 jquery 。在服务器上需要处理请求的代码 (比如 php 程序) 。

以 ajax 翻页,或者加载下一页内容为例,大概流程为:1 、访客在网页上点击下一页 (或者加载更多) 的链接 http://www.ashuwp.com/page/2,此时不刷新页面,而是通过 jquery 提交一个请求到服务器,然后服务器上处理这个请求,输出内容,即将 http://www.ashuwp.com/page/2 的内容全部输出,然后浏览器接受数据,然后从接受的数据中挑出文章内容 (因为输出内容包含整个网页的代码) 并显示到相应的位置。

实现方法:

1 、准备网页。

现在需要 ajax 翻页翻页的网页上准备好下一页的链接,如下是阿树的下一页代码,将链接放在一个 div 中,以便 js 选择。

  1. <div class="post-read-more">  
  2.     <?php next_posts_link('更多+','');//下一页的链接 ?>  
  3. </div>  

2 、准备 js 代码。

使用 jquery 非常方便,所以首先在网页头部加载 jquery 代码,我在主题底部文件 footer.php 中加载 jqeury 。我将 jquery-1.7.2.min.js 放在了主题文件夹的 js 文件夹里面,所以用 get_template_directory_uri() 函数来输出主题的 url

  1. <script src="<?php echo get_template_directory_uri();?>/js/jquery-1.7.2.min.js"></script>   

然后我将发起 ajax 请求代码也放在了主题里面 js 文件夹中的 ashu.js 文件,所以再加上一个

  1. <script src="<?php echo get_template_directory_uri();?>/js/ashu.js"></script>   

然后是 ashu.js 中的代码:

  1. /**  
  2.  * by ashu.  
  3.  * URI: http://www.ashuwp.com  
  4.  */  
  5.   
  6. jQuery(document).ready(function($) {   
  7. //点击下一页的链接 (即那个 a 标签)   
  8. $('div.post-read-more a').click( function() {   
  9.     $this = $(this);   
  10.     $this.addClass('loading'); //给 a 标签加载一个 loading 的 class 属性,可以用来添加一些加载效果   
  11.     var href = $this.attr("href"); //获取下一页的链接地址   
  12.     if (href != undefined) { //如果地址存在   
  13.         $.ajax( { //发起 ajax 请求   
  14.             url: href, //请求的地址就是下一页的链接   
  15.             type: "get"//请求类型是 get   
  16.   
  17.         error: function(request) {   
  18.             //如果发生错误怎么处理   
  19.         },   
  20.         success: function(data) { //请求成功   
  21.             $this.removeClass('loading'); //移除 loading 属性   
  22.             var $res = $(data).find(".post"); //从数据中挑出文章数据,请根据实际情况更改   
  23.             $('.posts-loop').append($res); //将数据加载加进 posts-loop 的标签中。   
  24.             var newhref = $(data).find(".post-read-more a").attr("href"); //找出新的下一页链接   
  25.             if( newhref != undefined ){   
  26.                 $(".post-read-more a").attr("href",newhref);   
  27.             }else{   
  28.                 $(".post-read-more").hide(); //如果没有下一页了,隐藏   
  29.             }   
  30.         }   
  31.         });   
  32.     }   
  33.     return false;   
  34. });   
  35.   
  36. });  

敬告:上面代码中,请求成功之后,浏览器要处理接受的数据,请根据实际情况更改,我的文章列表结构大概如下,所以我将所有 class 为 post 的 div 选出来,然后加载.posts-loop 中

  1. <div class="posts-loop">   
  2.     <div id="post-1" class="post"><!--第一篇文章--></div>   
  3.     <div id="post-2" class="post"><!--第二篇文章--></div>   
  4.     <div id="post-3" class="post"><!--第三篇文章--></div>   
  5.     <div id="post-4" class="post"><!--第四篇文章--></div>   
  6. </div>  

3 、浏览器对请求的处理

本例子中,并没有单独写代码处理请求,因为我们的请求地址都是 www.ashuwp.com/page/2 之类的,这类请求 wp 默认就能处理,也会输出相应的内容,所以不需要另外写处理文件。

当然,这种请求输出的内容是整个网页,跟普通的翻页相比,使用 ajax 也并无速度之类的优势,在接下来的教程中,我们将写单独特殊的 ajax 请求。