亚洲国产日韩欧美一区二区三区,精品亚洲国产成人av在线,国产99视频精品免视看7,99国产精品久久久久久久成人热,欧美日韩亚洲国产综合乱

jQuery Ajax 詳解

jQuery Ajax 詳解

jQuery提供了幾個用於發(fā)送Ajax請求的函數(shù). 其中最核心也是最複雜的是jQuery.ajax( options ),所有的其他Ajax函數(shù)都是它的一個簡化調(diào)用. 當我們想要完全控制Ajax時可以使用此結(jié)果, 否則還是使用簡化方法如get, post, load等更加方便. 所以jQuery.ajax( options )方法放到最後一個介紹. 先介紹最簡單的load方法:

1. ?load( url, [data], [callback] )

#Returns: jQuery包裝集

說明:

load方法能夠載入遠端HTML 檔案程式碼並插入到DOM 中。

預設(shè)使用 GET 方式, 如果傳遞了data參數(shù)則使用Post方式.

- 傳遞附加參數(shù)時自動轉(zhuǎn)換為 POST 方式。 jQuery 1.2 中,可以指定選擇符,來篩選載入的 HTML 文檔,DOM 中將只插入篩選出的 HTML 程式碼。語法形如"url #some > selector", 預設(shè)的選擇器是"body>*".

講解:

load是最簡單的Ajax函數(shù), 但是使用具有局限性:

它主要用於直接傳回HTML的Ajax介面

load是一個jQuery包裝集方法,需要在jQuery包裝集上呼叫,並且會將傳回的HTML載入到物件中,即使設(shè)定了回呼函數(shù)還是會載入.

不過不可否認load介面設(shè)計巧妙並且使用簡單.下面透過範例來示範Load介面的使用:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
    <title>jQuery Ajax - Load</title>
   <script type="text/javascript" src="../scripts/jquery-1.3.2-vsdoc2.js"></script>
    <script type="text/javascript">
        $(function()
        {
            $("#btnAjaxGet").click(function(event)
            {
                //發(fā)送Get請求
                $("#divResult").load("../data/AjaxGetMethod.aspx?param=btnAjaxGet_click" + "&timestamp=" + (new Date()).getTime());
            });
            $("#btnAjaxPost").click(function(event)
            {
                //發(fā)送Post請求
                $("#divResult").load("../data/AjaxGetMethod.aspx", { "param": "btnAjaxPost_click" });
            });
            $("#btnAjaxCallBack").click(function(event)
            {
                //發(fā)送Post請求, 返回后執(zhí)行回調(diào)函數(shù).
                $("#divResult").load("../data/AjaxGetMethod.aspx", { "param": "btnAjaxCallBack_click" }, function(responseText, textStatus, XMLHttpRequest)
                {
                    responseText = " Add in the CallBack Function! <br/>" + responseText
                    $("#divResult").html(responseText); //或者: $(this).html(responseText);
                });
            });
            $("#btnAjaxFiltHtml").click(function(event)
            {
                //發(fā)送Get請求, 從結(jié)果中過濾掉 "鞍山" 這一項
                $("#divResult").load("../data/AjaxGetCityInfo.aspx?resultType=html" + "&timestamp=" + (new Date()).getTime() + " ul>li:not(:contains('鞍山'))");
            });
        })
    </script>
</head>
<body>    
    <button id="btnAjaxGet">使用Load執(zhí)行Get請求</button><br />
    <button id="btnAjaxPost">使用Load執(zhí)行Post請求</button><br />
    <button id="btnAjaxCallBack">使用帶有回調(diào)函數(shù)的Load方法</button><br />
    <button id="btnAjaxFiltHtml">使用selector過濾返回的HTML內(nèi)容</button>
    <br />
    <div id="divResult"></div>
</body>
</html>

?上面的範例示範如何使用Load方法.

提示:我們要隨時注意瀏覽器快取, ?當使用GET方式時要加入時間戳參數(shù)(net Date()).getTime() 來確保每次傳送的URL不同, 可以避免瀏覽器快取.

提示: 當在url參數(shù)後面添加了一個空格, 例如" ?"的時候, 會出現(xiàn)"無法識別符號"的錯誤, 請求還是能正常發(fā)送. 但是無法載入HTML到DOM. 刪除後問題解決.?

#2.jQuery.get( url, [data], [callback], [type] )?

Returns: XMLHttpRequest

說明:

透過遠端HTTP GET 請求載入訊息。

這是一個簡單的 GET 請求功能以取代複雜 $.ajax 。請求成功時可呼叫回調(diào)函數(shù)。如果需要在出錯時執(zhí)行函數(shù),請使用 $.ajax。

講解:

此函數(shù)傳送Get請求, 參數(shù)可以直接在url中拼接, 例如:

$.get("../data/AjaxGetMethod.aspx?param=btnAjaxGet_click");

或透過data參數(shù)傳遞:

$.get("../data/AjaxGetMethod.aspx", { "param": "btnAjaxGet2_click" });

?兩種方式效果相同, data參數(shù)會自動加入到請求的url中

如果url中的某個參數(shù), 又透過data參數(shù)傳遞, 不會自動合併相同名稱的參數(shù).

回呼函數(shù)的簽章如下:

function (data, textStatus) {
  // data could be xmlDoc, jsonObj, html, text, etc...
  this; // the options for this ajax request
}

其中data是傳回的資料, testStatus表示狀態(tài)碼, 可能是如下值:

#
"timeout","error","notmodified","success","parsererror"

在回呼函數(shù)中的this是取得options物件的參考.有關(guān)options的各種說明, 請參閱:

http://docs.jquery.com/Ajax/jQuery.ajax#options

?type參數(shù)是指data資料的型別, 可能是下面的值:

"xml", "html", "script", "json", "jsonp", ?"text".

預設(shè)為"html".

jQuery.getJSON( url, [data], [callback] ) 方法就相當於jQuery.get(url, [data],[callback ], "json")

?3. jQuery.getJSON( url, ?[data], [callback] )

#Returns: XMLHttpRequest

相當於: ? jQuery.get(url, [data],[callback], "json")

說明:

透過HTTP GET 請求載入JSON 資料。

在 jQuery 1.2 中,您可以透過使用JSONP 形式的回呼函數(shù)來載入其他網(wǎng)域的JSON數(shù)據(jù),例如 "myurl?callback=?"。 jQuery 將自動替換 ? 為正確的函數(shù)名,以執(zhí)行回呼函數(shù)。

注意:此行以後的程式碼將在這個回呼函數(shù)執(zhí)行前執(zhí)行。

解說:

getJSON函數(shù)僅將get函數(shù)的type參數(shù)設(shè)為"JSON"而已. 在回呼函數(shù)中取得的資料已經(jīng)是按照JSON格式解析後的物件了:

$.getJSON("../data/AjaxGetCityInfo.aspx", { "resultType": "json" }, function(data, textStatus)
{
      alert(data.length);
      alert(data[0].CityName);
});

?伺服器端傳回的字串如下:

#[{""pkid"":""0997"",""ProvinceId"":"" XJ"",""CityName"":""阿克蘇"",""CityNameEn"":""Akesu"",""PostCode"":""843000"",""isHotCity"":false},

?{""pkid"":""0412"",""ProvinceId"":""LN"",""CityName"":""鞍山"",""CityNameEn"" :""Anshan"",""PostCode"":""114000"",""isHotCity"":false}]

?範例中我回傳的是一個陣列, 使用data.length可以取得陣列的元素個數(shù), ?data[0]存取第一個元素, data[0].CityName存取第一個元素的CityName屬性.

?4.jQuery.getScript( url, [callback] )

Returns: XMLHttpRequest

等於: ? jQuery.get(url, null, [callback], "script")

說明:

透過HTTP GET 要求載入並執(zhí)行一個JavaScript 檔案。

jQuery 1.2 版本之前,getScript 只能呼叫同域 JS 檔案。 1.2中,您可以跨域呼叫 JavaScript 檔案。注意:Safari 2 或更早的版本不能在全域作用域中同步執(zhí)行腳本。如果透過 getScript 加入腳本,請加入延時函數(shù)。

講解:

以前我使用dojo類庫時官方默認的文件不支持跨域最後導致我放棄使用dojo(雖然在網(wǎng)上找到了可以跨域的版本, 但是感覺不夠完美). ?所以我特別對這個函數(shù)的核心實作和使用做了研究.

首先了解此函數(shù)的jQuery內(nèi)部實作, 仍然使用get函數(shù), jQuery所有的Ajax函數(shù)包括get最後都是用的是jQuery.ajax(), getScript將傳入值為"script"的type參數(shù), ?最後在Ajax函數(shù)中對type為script的請求做瞭如下處理:

var head = document.getElementsByTagName("head")[0];            
var script = document.createElement("script");
script.src = s.url;

上面的程式碼動態(tài)建立了一個script語句區(qū)塊, 並且將其加入head中:

head.appendChild(script);

當腳本載入完畢後, 再從head刪除:

  // Handle Script loading
            if ( !jsonp ) {
                var done = false;
                // Attach handlers for all browsers
                script.onload = script.onreadystatechange = function(){
                    if ( !done && (!this.readyState ||
                            this.readyState == "loaded" || this.readyState == "complete") ) {
                        done = true;
                        success();
                        complete();
                        // Handle memory leak in IE
                        script.onload = script.onreadystatechange = null;
                        head.removeChild( script );
                    }
                };
            }

主要測試了此函數(shù)的跨域存取和多瀏覽器支援.下面是結(jié)果:

##請注意事項#透過透過回呼函數(shù)中的data和textStatus均可用跨域引用js透過透過回呼函數(shù)中的data和textStatus均為undifined#

?下面是關(guān)鍵的測試語句, 也用來示範如何使用getScript函數(shù):

  $("#btnAjaxGetScript").click(function(event)
            {
                $.getScript("../scripts/getScript.js", function(data, textStatus)
                {
                    alert(data);
                    alert(textStatus);
                    alert(this.url);
                });
            });
            $("#btnAjaxGetScriptCross").click(function(event)
            {
                $.getScript("http://resource.elong.com/getScript.js", function(data, textStatus)
                {
                    alert(data);
                    alert(textStatus);
                    alert(this.url);
                });
            });

? 5. jQuery.post( url, [data], [callback], [type ] )

Returns: XMLHttpRequest

#說明:

透過遠端HTTP POST 請求載入資訊。

這是一個簡單的 POST 請求功能以取代複雜 $.ajax 。請求成功時可呼叫回調(diào)函數(shù)。如果需要在出錯時執(zhí)行函數(shù),請使用 $.ajax。

講解:

具體用法和get相同, 只是提交方式由"GET"改為"POST".

6. jQuery.ajax( options )

#Returns: XMLHttpRequest

說明:

透過HTTP 請求載入遠端資料。

jQuery 底層 AJAX 實作。簡單易用的高層實作請見 $.get, $.post 等。

$.ajax() 傳回其建立的 XMLHttpRequest 物件。大多數(shù)情況下你無需直接操作該對象,但特殊情況下可用於手動終止請求。

$.ajax() 只有一個參數(shù):參數(shù) key/value 對象,包含各配置及回呼函數(shù)資訊。詳細參數(shù)選項請見下。

注意: 如果你指定了 dataType 選項,請確保伺服器傳回正確的 MIME 訊息,(如 xml 返回 "text/xml")。錯誤的 MIME 類型可能導致不可預測的錯誤。請參閱 Specifying the Data Type for AJAX Requests 。

注意:如果dataType設(shè)定為"script",那麼所有的遠端(不在同一網(wǎng)域下)的POST請求都會轉(zhuǎn)換為GET請求。 (因為將使用DOM的script標籤來載入)

jQuery 1.2 中,您可以跨網(wǎng)域載入 JSON 數(shù)據(jù),使用時需將資料類型設(shè)為 JSONP。使用 JSONP 形式呼叫函數(shù)時,如 "myurl?callback=?" jQuery 會自動取代 ? 為正確的函式名,以執(zhí)行回呼函數(shù)。當資料類型設(shè)定為 "jsonp" 時,jQuery 會自動呼叫回呼函數(shù)。

講解:

這是jQuery中Ajax的核心函數(shù), 上面所有的發(fā)送Ajax請求的函數(shù)內(nèi)部最後都會調(diào)用此函數(shù).options參數(shù)支援很多參數(shù),使用這些參數(shù)可以完全控制ajax請求. 在Ajax回調(diào)函數(shù)中的this對像也是options對象.

因為平時使用最多的還是簡化了的get和post函數(shù), 所以在此不對options參數(shù)做詳細講解了.

繼續(xù)學習
||
<!DOCTYPE html> <html> <head> <script src="http://code.jquery.com/jquery-3.1.1.min.js"></script> <script> $(document).ready(function(){ $("#btn1").click(function(){ $('#test').load('/asset/demo.ajax.php?dm=txt&act=getfruits'); 可以自定義文本內(nèi)容! }) }) </script> </head> <body> <h3 id="test">請點擊下面的按鈕,通過 jQuery AJAX 改變這段文本。</h3> <button id="btn1" type="button">獲得外部的內(nèi)容</button> </body> </html>
      <del id="syili"><option id="syili"></option></del>
      <button id="syili"><tbody id="syili"><object id="syili"></object></tbody></button>

            <abbr id="syili"></abbr><thead id="syili"></thead>


                #IE6FireFox
                非跨域引用js