一般我們使用瀏覽器提交新請求或者資料,都會重新整理頁面,比如在 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 請求。