一般我們使用瀏覽器提交新請求或者數據,都會刷新頁面,比如在 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 選擇。
- <div class="post-read-more">
- <?php next_posts_link('更多+','');//下一頁的鏈接 ?>
- </div>
2 、準備 js 代碼。
使用 jquery 非常方便,所以首先在網頁頭部加載 jquery 代碼,我在主題底部文件 footer.php 中加載 jqeury 。我將 jquery-1.7.2.min.js 放在了主題文件夾的 js 文件夾裏面,所以用 get_template_directory_uri() 函數來輸出主題的 url
- <script src="<?php echo get_template_directory_uri();?>/js/jquery-1.7.2.min.js"></script>
然後我將發起 ajax 請求代碼也放在了主題裏面 js 文件夾中的 ashu.js 文件,所以再加上一個
- <script src="<?php echo get_template_directory_uri();?>/js/ashu.js"></script>
然後是 ashu.js 中的代碼:
- /**
- * by ashu.
- * URI: http://www.ashuwp.com
- */
- jQuery(document).ready(function($) {
- //點擊下一頁的鏈接 (即那個 a 標籤)
- $('div.post-read-more a').click( function() {
- $this = $(this);
- $this.addClass('loading'); //給 a 標籤加載一個 loading 的 class 屬性,可以用來添加一些加載效果
- var href = $this.attr("href"); //獲取下一頁的鏈接地址
- if (href != undefined) { //如果地址存在
- $.ajax( { //發起 ajax 請求
- url: href, //請求的地址就是下一頁的鏈接
- type: "get", //請求類型是 get
- error: function(request) {
- //如果發生錯誤怎麼處理
- },
- success: function(data) { //請求成功
- $this.removeClass('loading'); //移除 loading 屬性
- var $res = $(data).find(".post"); //從數據中挑出文章數據,請根據實際情況更改
- $('.posts-loop').append($res); //將數據加載加進 posts-loop 的標籤中。
- var newhref = $(data).find(".post-read-more a").attr("href"); //找出新的下一頁鏈接
- if( newhref != undefined ){
- $(".post-read-more a").attr("href",newhref);
- }else{
- $(".post-read-more").hide(); //如果沒有下一頁了,隱藏
- }
- }
- });
- }
- return false;
- });
- });
敬告:上面代碼中,請求成功之後,瀏覽器要處理接受的數據,請根據實際情況更改,我的文章列表結構大概如下,所以我將所有 class 為 post 的 div 選出來,然後加載.posts-loop 中
- <div class="posts-loop">
- <div id="post-1" class="post"><!--第一篇文章--></div>
- <div id="post-2" class="post"><!--第二篇文章--></div>
- <div id="post-3" class="post"><!--第三篇文章--></div>
- <div id="post-4" class="post"><!--第四篇文章--></div>
- </div>
3 、瀏覽器對請求的處理
本例子中,並沒有單獨寫代碼處理請求,因為我們的請求地址都是 www.ashuwp.com/page/2 之類的,這類請求 wp 默認就能處理,也會輸出相應的內容,所以不需要另外寫處理文件。
當然,這種請求輸出的內容是整個網頁,跟普通的翻頁相比,使用 ajax 也並無速度之類的優勢,在接下來的教程中,我們將寫單獨特殊的 ajax 請求。