第 8 章 jQuery 實現(xiàn) Ajax 應(yīng)用

使用 load() 方法異步請求數(shù)據(jù)

使用load()方法通過 Ajax 請求加載服務(wù)器中的數(shù)據(jù),并把返回的數(shù)據(jù)放置到指定的元素中,它的調(diào)用格式為:

load(url,[data],[callback])

參數(shù) url 為加載服務(wù)器地址,可選項 data 參數(shù)為請求時發(fā)送的數(shù)據(jù),callback 參數(shù)為數(shù)據(jù)請求成功后,執(zhí)行的回調(diào)函數(shù)。

例如,點擊“加載”按鈕時,向服務(wù)器請求加載一個指定頁面的內(nèi)容,加載成功后,將數(shù)據(jù)內(nèi)容顯示在<div>元素中,并將加載按鈕變?yōu)椴豢捎?。如下圖所示:

在瀏覽器中顯示的效果:

從圖中可以看出,當(dāng)點擊“加載”按鈕時,通過調(diào)用load()方法向服務(wù)器請求加載 fruit.html 文件中的內(nèi)容,當(dāng)加載成功后,先顯示數(shù)據(jù),并將按鈕變?yōu)椴豢捎谩?/p>

使用 getJSON() 方法異步加載 JSON 格式數(shù)據(jù)

使用getJSON()方法可以通過 Ajax 異步請求的方式,獲取服務(wù)器中的數(shù)據(jù),并對獲取的數(shù)據(jù)進行解析,顯示在頁面中,它的調(diào)用格式為:

jQuery.getJSON(url,[data],[callback]) 或 $.getJSON(url,[data],[callback])

其中,url 參數(shù)為請求加載 json 格式文件的服務(wù)器地址,可選項 data 參數(shù)為請求時發(fā)送的數(shù)據(jù),callback 參數(shù)為數(shù)據(jù)請求成功后,執(zhí)行的回調(diào)函數(shù)。

例如,點擊頁面中的“加載”按鈕,調(diào)用getJSON()方法獲取服務(wù)器中 JSON 格式文件中的數(shù)據(jù),并遍歷數(shù)據(jù),將指定的字段名內(nèi)容顯示在頁面中。如下圖所示:

在瀏覽器中顯示的效果:

從圖中可以看出,當(dāng)點擊“加載”按鈕時,通過getJSON()方法調(diào)用服務(wù)器中的 sport.json 文件,獲取返回的 data 文件數(shù)據(jù),并遍歷該數(shù)據(jù)對象,以data[“name”]取出數(shù)據(jù)中指定的內(nèi)容,顯示在頁面中。

使用 getScript() 方法異步加載并執(zhí)行js文件

使用getScript()方法異步請求并執(zhí)行服務(wù)器中的 JavaScript 格式的文件,它的調(diào)用格式如下所示:

jQuery.getScript(url,[callback]) 或 $.getScript(url,[callback])

參數(shù) url 為服務(wù)器請求地址,可選項 callback 參數(shù)為請求成功后執(zhí)行的回調(diào)函數(shù)。

例如,點擊“加載”按鈕,調(diào)用getScript()加載并執(zhí)行服務(wù)器中指定名稱的 JavaScript 格式的文件,并在頁面中顯示加載后的數(shù)據(jù)內(nèi)容,如下圖所示:

在瀏覽器中顯示的效果:

從圖中可以看出,當(dāng)點擊“加載”按鈕調(diào)用getScript()方法加載服務(wù)器中的 JavaScript 格式文件后,自動執(zhí)行文件代碼,將數(shù)據(jù)內(nèi)容顯示在<ul>元素中。

使用 get() 方法以 GET 方式從服務(wù)器獲取數(shù)據(jù)

使用get()方法時,采用 GET 方式向服務(wù)器請求數(shù)據(jù),并通過方法中回調(diào)函數(shù)的參數(shù)返回請求的數(shù)據(jù),它的調(diào)用格式如下:

$.get(url,[callback])

參數(shù) url 為服務(wù)器請求地址,可選項 callback 參數(shù)為請求成功后執(zhí)行的回調(diào)函數(shù)。

例如,當(dāng)點擊“加載”按鈕時,調(diào)用get()方法向服務(wù)器中的一個 .php 文件以 GET 方式請求數(shù)據(jù),并將返回的數(shù)據(jù)內(nèi)容顯示在頁面中,如下圖所示:

在瀏覽器中顯示的效果:

從圖中可以看出,通過$.get()方法向服務(wù)器成功請求數(shù)據(jù)后,在回調(diào)函數(shù)中通過 data 參數(shù)傳回請求的數(shù)據(jù),并以 data.name 格式訪問數(shù)據(jù)中各項的內(nèi)容。

使用 post() 方法以 POST 方式從服務(wù)器發(fā)送數(shù)據(jù)

get()方法相比,post()方法多用于以 POST 方式向服務(wù)器發(fā)送數(shù)據(jù),服務(wù)器接收到數(shù)據(jù)之后,進行處理,并將處理結(jié)果返回頁面,調(diào)用格式如下:

$.post(url,[data],[callback])

參數(shù) url 為服務(wù)器請求地址,可選項 data 為向服務(wù)器請求時發(fā)送的數(shù)據(jù),可選項 callback 參數(shù)為請求成功后執(zhí)行的回調(diào)函數(shù)。

例如,在輸入框中錄入一個數(shù)字,點擊“檢測”按鈕,調(diào)用post()方法向服務(wù)器以 POST 方式發(fā)送請求,檢測輸入值的奇偶性,并顯示在頁面中,如下圖所示:

在瀏覽器中顯示的效果:

從圖中可以看出,當(dāng)點擊“檢測”按鈕時,獲取輸入框中的值,并將該值使用$.post()方法一起發(fā)送給服務(wù)器,服務(wù)器接收該值后并進行處理,最后返回處理結(jié)果。

使用 serialize() 方法序列化表單元素值

使用serialize()方法可以將表單中有name屬性的元素值進行序列化,生成標(biāo)準(zhǔn)URL編碼文本字符串,直接可用于ajax請求,它的調(diào)用格式如下:

$(selector).serialize()

其中 selector 參數(shù)是一個或多個表單中的元素或表單元素本身。

例如,在表單中添加多個元素,點擊“序列化”按鈕后,調(diào)用serialize()方法,將表單元素序列化后的標(biāo)準(zhǔn) URL 編碼文本字符串顯示在頁面中,如下圖所示:

在瀏覽器中顯示的效果:

從圖中可以看出,當(dāng)點擊“序列化”按鈕后,調(diào)用表單元素本身的serialize()方法,將表單中元素全部序列化,生成標(biāo)準(zhǔn) URL 編碼,各元素間通過&號相聯(lián)。

使用 ajax() 方法加載服務(wù)器數(shù)據(jù)

使用ajax()方法是最底層、功能最強大的請求服務(wù)器數(shù)據(jù)的方法,它不僅可以獲取服務(wù)器返回的數(shù)據(jù),還能向服務(wù)器發(fā)送請求并傳遞數(shù)值,它的調(diào)用格式如下:

jQuery.ajax([settings]) 或 $.ajax([settings])

其中參數(shù) settings 為發(fā)送 ajax 請求時的配置對象,在該對象中,url表示服務(wù)器請求的路徑,data為請求時傳遞的數(shù)據(jù),dataType為服務(wù)器返回的數(shù)據(jù)類型,success為請求成功的執(zhí)行的回調(diào)函數(shù),type為發(fā)送數(shù)據(jù)請求的方式,默認(rèn)為get。

例如,點擊頁面中的“加載”按鈕,調(diào)用ajax()方法向服務(wù)器請求加載一個 txt 文件,并將返回的文件中的內(nèi)容顯示在頁面,如下圖所示:

在瀏覽器中顯示的效果:

從圖中可以看出,當(dāng)點擊“加載”按鈕時,調(diào)用$.ajax()方法請求服務(wù)器中 txt 文件,當(dāng)請求成功時調(diào)用 success 回調(diào)函數(shù),獲取傳回的數(shù)據(jù),并顯示在頁面中。

<body>
        <div id="divtest">
            <div class="title">
                <span class="fl">檢測數(shù)字的奇偶性</span> 
                <span class="fr">
                    <input id="btnCheck" type="button" value="檢測" />
                </span>
            </div>
            <ul>
               <li>請求輸入一個數(shù)字 
                   <input id="txtNumber" type="text" size="12" />
               </li>
            </ul>
        </div>
        
        <script type="text/javascript">
            $(function () {
                $("#btnCheck").bind("click", function () {
                    $.ajax({
                        url: "http://www.imooc.com/data/check.php",
                        data: { num: $("#txtNumber").val() },
                        dataType: "text",
                        success: function (data) {
                            $("ul").append("<li>你輸入的<b>  "
                            + $("#txtNumber").val() + " </b>是<b> "
                            + data + " </b></li>");
                        },
                        type: "get"
                    });
                })
            });
        </script>
    </body>

使用 ajaxSetup() 方法設(shè)置全局 Ajax 默認(rèn)選項

使用ajaxSetup()方法可以設(shè)置 Ajax 請求的一些全局性選項值,設(shè)置完成后,后面的 Ajax 請求將不需要再添加這些選項值,它的調(diào)用格式為:

jQuery.ajaxSetup([options]) 或 $.ajaxSetup([options])

可選項 options 參數(shù)為一個對象,通過該對象設(shè)置 Ajax 請求時的全局選項值。

例如,先調(diào)用ajaxSetup()方法設(shè)置全局的 Ajax 選項值,再點擊兩個按鈕,分別使用ajax()方法請求不同的服務(wù)器數(shù)據(jù),并將數(shù)據(jù)內(nèi)容顯示在頁面,如下圖所示:

在瀏覽器中顯示的效果:

從圖中可以看出,使用ajaxSetup()方法設(shè)置了 Ajax 請求時的一些全局性的配置選項后,在兩次調(diào)用 ajax 請求服務(wù)器txt文件時,只需要設(shè)置 url 地址即可。

使用 ajaxStart() 和 ajaxStop() 方法

ajaxStart()ajaxStop()方法是綁定 Ajax 事件。ajaxStart()方法用于在 Ajax 請求發(fā)出前觸發(fā)函數(shù),ajaxStop()方法用于在 Ajax 請求完成后觸發(fā)函數(shù)。它們的調(diào)用格式為:

$(selector).ajaxStart(function()) 和 $(selector).ajaxStop(function())

其中,兩個方法中括號都是綁定的函數(shù),當(dāng)發(fā)送 Ajax 請求前執(zhí)行ajaxStart()方法綁定的函數(shù),請求成功后,執(zhí)行ajaxStop ()方法綁定的函數(shù)。

例如,在調(diào)用ajax()方法請求服務(wù)器數(shù)據(jù)前,使用動畫顯示正在加載中,當(dāng)請求成功后,該動畫自動隱藏,如下圖所示:

在瀏覽器中顯示的效果:

從圖中可以看出,由于使用ajaxStart()ajaxStop()方法綁定了動畫元素,因此,在開始發(fā)送 Ajax 請求時,元素顯示,請求完成時,動畫元素自動隱藏。

注意:該方法在 1.8.2 下使用是正常的

<body>
        <div id="divtest">
            <div class="title">
                <span class="fl">加載一段文字</span> 
                <span class="fr">
                    <input id="btnShow" type="button" value="加載" />
                </span>
            </div>
            <ul>
               <li id="divload"></li>
            </ul>
        </div>
        
        <script type="text/javascript">
            $(function () {
                $("#divload").ajaxStart(function(){
                    $(this).html("正在請求數(shù)據(jù)...");
                });
                $("#divload").ajaxStop(function(){
                    $(this).html("數(shù)據(jù)請求完成!");
                });
                $("#btnShow").bind("click", function () {
                    var $this = $(this);
                    $.ajax({
                        url: "http://www.imooc.com/data/info_f.php",
                        dataType: "json",
                        success: function (data) {
                            $this.attr("disabled", "true");
                        $("ul").append("<li>我的名字叫:" + data.name + "</li>");
                        $("ul").append("<li>男朋友對我說:" + data.say + "</li>");
                        }
                    });
                })
            });
        </script>
    </body>

編程練習(xí)

定義一個 json 對象,用于保存學(xué)生的相關(guān)資料

任務(wù)

通過$.each()工具函數(shù),獲取數(shù)組中各元素的名稱與內(nèi)容,顯示在頁面中。

<html>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />       
        <title>挑戰(zhàn)題</title>
        <style>
            .ui-table {margin: 20px auto; border-collapse: collapse; font-size: 12px; text-align: center; color: #666;}
            .ui-table th, .ui-table td {padding: 4px 8px; border: 1px solid #ccc;}
            .ui-table th {background-color: #f0f0f0;}
        </style>
        <script src="http://libs.baidu.com/jquery/1.9.0/jquery.js"></script>
    </head>
    <body>
        <table class="ui-table" width="800" id="studentInfo">
            <caption><h2>XX中學(xué)學(xué)生資料</h2></caption>
            <thead>
            <tr>
                <th style="width:45px">序號</th>
                <th>姓名</th>
                <th>學(xué)號</th>
                <th>性別</th>
                <th>年齡</th>
                <th>所在班級</th>
                <th>富二代</th>
            </tr>
            </thead>
            <tbody>
                <tr>
                    <td colspan="7">
                        <input type="button" value="加載資料" onclick="DisplayInfo()">
                    </td>
                </tr>
            </tbody>
        </table>
        <script>
        var students = [
            {"name": "張三", "id": "00145", "sex": "男", "age": "15", "class": "初一(3)班", "vip": "否"},
            {"name": "李四", "id": "00110", "sex": "女", "age": "15", "class": "初二(2)班", "vip": "否"},
            {"name": "王五", "id": "00251", "sex": "男", "age": "17", "class": "初一(4)班", "vip": "是"},
            {"name": "趙六", "id": "00031", "sex": "女", "age": "16", "class": "初二(3)班", "vip": "否"},
            {"name": "吳七", "id": "00009", "sex": "女", "age": "19", "class": "初三(6)班", "vip": "否"},
            {"name": "候八", "id": "00352", "sex": "男", "age": "14", "class": "初一(2)班", "vip": "是"},
        ];     
        function DisplayInfo() {
            var tbody = $("#studentInfo").find("tbody");
                tbody.empty();
            $.each(students,function(index, student) {
                tbody.append(
                    "<tr><td>" + parseInt(index+1) + "</td><td>" +
                                  student.name + "</td><td>" +
                                  student.id +   "</td><td>" +
                                  student.sex +   "</td><td>" +
                                  student.age +   "</td><td>" +
                                  student.class +   "</td><td>" +
                                  student.vip +   "</td></tr>");
            });
        }
        </script>
    </body>
</html>
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 第1章 jQuery實現(xiàn)Ajax應(yīng)用 1-1 使用load()方法異步請求數(shù)據(jù) 使用load()方法通過Ajax請...
    mo默22閱讀 1,877評論 1 9
  • 一、 使用load()方法異步請求數(shù)據(jù) 使用load()方法通過Ajax請求加載服務(wù)器中的數(shù)據(jù),并把返回的數(shù)據(jù)放置...
    blue_angel閱讀 430評論 0 0
  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 136,506評論 19 139
  • 記得小時候上課很調(diào)皮,喜歡和同桌打鬧拌嘴。因為放的開,變成了班里的“小喇叭”。我就是這樣的一個人愛說話,愛鬧事,甚...
    漾233閱讀 295評論 0 0
  • 從來不知道要去何方 沿著柏油路的方向 一場精神世界的暢想 隨著奔跑的方向 始終記得家在何方 夜幕降臨的某一天晚上 ...
    小漁閱讀 225評論 1 1

友情鏈接更多精彩內(nèi)容