天天看點

jQuery Ajax 執行個體 全解析 (轉)

1. load( url, [data], [callback] ) :載入遠端 HTML 檔案代碼并插入至 DOM 中。

url (String) : 請求的HTML頁的URL位址。

data (Map) : (可選參數) 發送至伺服器的 key/value 資料。

callback (Callback) : (可選參數) 請求完成時(不需要是success的)的回調函數。

這個方法預設使用 GET 方式來傳遞的,如果[data]參數有傳遞資料進去,就會自動轉換為POST方式的。jQuery 1.2 中,可以指定選擇符,來篩選載入的 HTML 文檔,DOM 中将僅插入篩選出的 HTML 代碼。文法形如 "url #some > selector"。

這個方法可以很友善的動态加載一些HTML檔案,例如表單。

示例代碼:

$(".ajax.load").load("http://www.cnblogs.com/yeer/archive/2009/06/10/1500682.html .post",
function (responseText, textStatus, XMLHttpRequest){
this;//在這裡this指向的是目前的DOM對象,即$(".ajax.load")[0] 
//alert(responseText);//請求傳回的内容
//alert(textStatus);//請求狀态:success,error
//alert(XMLHttpRequest);//XMLHttpRequest對象
});      

這裡将顯示結果。

注:不知道為什麼URL寫絕對路徑在FF下會出錯,知道的麻煩告訴下。下面的get()和post()示例使用的是絕對路徑,是以在FF下你将會出錯并不會看到傳回結果。還有get()和post()示例都是跨域調用的,發現傳上來後沒辦法擷取結果,是以把運作按鈕去掉了。

2. jQuery.get( url, [data], [callback] ):使用GET方式來進行異步請求

參數:

url (String) :  發送請求的URL位址.

data (Map) : (可選) 要發送給伺服器的資料,以 Key/value 的鍵值對形式表示,會做為QueryString附加到請求URL中。

callback (Function) : (可選) 載入成功時回調函數(隻有當Response的傳回狀态是success才是調用該方法)。

這是一個簡單的 GET 請求功能以取代複雜 $.ajax 。請求成功時可調用回調函數。如果需要在出錯時執行函數,請使用 $.ajax。示例代碼:

$.get("./Ajax.aspx", {Action:"get",Name:"lulu"}, function (data, textStatus){
//傳回的 data 可以是 xmlDoc, jsonObj, html, text, 等等.
this; // 在這裡this指向的是Ajax請求的選項配置資訊,請參考下圖
alert(data);
//alert(textStatus);//請求狀态:success,error等等。

當然這裡捕捉不到error,因為error的時候根本不會運作該回調函數
//alert(this);
});      

點選發送請求:

jQuery.get()回調函數裡面的 this ,指向的是Ajax請求的選項配置資訊:

jQuery Ajax 執行個體 全解析 (轉)

3. jQuery.post( url, [data], [callback], [type] ) :使用POST方式來進行異步請求

url (String) : 發送請求的URL位址.

data (Map) : (可選) 要發送給伺服器的資料,以 Key/value 的鍵值對形式表示。

type (String) : (可選)官方的說明是:Type of data to be sent。其實應該為用戶端請求的類型(JSON,XML,等等)

這是一個簡單的 POST 請求功能以取代複雜 $.ajax 。請求成功時可調用回調函數。如果需要在出錯時執行函數,請使用 $.ajax。示例代碼:

Ajax.aspx:

Response.ContentType = "application/json";

Response.Write("{result: '" + Request["Name"] + ",你好!(這消息來自伺服器)'}");      

jQuery 代碼:

$.post("Ajax.aspx", { Action: "post", Name: "lulu" },
function (data, textStatus){
// data 可以是 xmlDoc, jsonObj, html, text, 等等.
//this; // 這個Ajax請求的選項配置資訊,請參考jQuery.get()說到的this
alert(data.result);

}, "json");      

點選送出:

這裡設定了請求的格式為"json":

jQuery Ajax 執行個體 全解析 (轉)

如果你設定了請求的格式為"json",此時你沒有設定Response回來的ContentType 為:Response.ContentType = "application/json"; 那麼你将無法捕捉到傳回的資料。

注意一下,alert(data.result); 由于設定了Accept報頭為“json”,這裡傳回的data就是一個對象,并不需要用eval()來轉換為對象。

4. jQuery.getScript( url, [callback] ) : 通過 GET 方式請求載入并執行一個 JavaScript 檔案。

參數

url (String) : 待載入 JS 檔案位址。

callback (Function) : (可選) 成功載入後回調函數。

jQuery 1.2 版本之前,getScript 隻能調用同域 JS 檔案。 1.2中,您可以跨域調用 JavaScript 檔案。注意:Safari 2 或更早的版本不能在全局作用域中同步執行腳本。如果通過 getScript 加入腳本,請加入延時函數。

這個方法可以用在例如當隻有編輯器focus()的時候才去加載編輯器需要的JS檔案.下面看一些示例代碼:

加載并執行 test.js。

jQuery 代碼:

$.getScript("test.js");

加載并執行 AjaxEvent.js ,成功後顯示資訊。

jQuery 代碼:

$.getScript("AjaxEvent.js", function(){
alert("AjaxEvent.js 加載完成并執行完成.你再點選上面的Get或Post按鈕看看有什麼不同?");

});      

加載完後請重新點選一下上面的 Load 請求看看有什麼不同。

jQuery Ajax 事件

Ajax請求會産生若幹不同的事件,我們可以訂閱這些事件并在其中處理我們的邏輯。在jQuery這裡有兩種Ajax事件:局部事件 和 全局事件。

局部事件就是在每次的Ajax請求時在方法内定義的,例如:

$.ajax({

beforeSend: function(){
// Handle the beforeSend event
},
complete: function(){
// Handle the complete event
}
// ...
});      

全局事件是每次的Ajax請求都會觸發的,它會向DOM中的所有元素廣播,在上面 getScript() 示例中加載的腳本就是全局Ajax事件。全局事件可以如下定義:

$("#loading").bind("ajaxSend", function(){

$(this).show();

}).bind("ajaxComplete", function(){

$(this).hide();

});      

或者:

$("#loading").ajaxStart(function(){

$(this).show();

});       

我們可以在特定的請求将全局事件禁用,隻要設定下 global 選項就可以了:

$.ajax({

url: "test.html",

global: false,// 禁用全局Ajax事件.
// ...
});      

下面是jQuery官方給出的完整的Ajax事件清單:

ajaxStart (Global Event)

This event is broadcast if an Ajax request is started and no other Ajax requests are currently running.

  • beforeSend (Local Event)

    This event, which is triggered before an Ajax request is started, allows you to modify the XMLHttpRequest object (setting additional headers, if need be.)

  • ajaxSend (Global Event)

    This global event is also triggered before the request is run.

  • success (Local Event)

    This event is only called if the request was successful (no errors from the server, no errors with the data).

  • ajaxSuccess (Global Event)

    This event is also only called if the request was successful.

  • error (Local Event)

    This event is only called if an error occurred with the request (you can never have both an error and a success callback with a request).

  • ajaxError (Global Event)

    This global event behaves the same as the local error event.

  • complete (Local Event)

    This event is called regardless of if the request was successful, or not. You will always receive a complete callback, even for synchronous requests.

  • ajaxComplete (Global Event)

    This event behaves the same as the complete event and will be triggered every time an Ajax request finishes.

ajaxStop (Global Event)

This global event is triggered if there are no more Ajax requests being processed.

具體的全局事件請參考API文檔。

好了,下面開始說jQuery裡面功能最強的Ajax請求方法 $.ajax();  

jQuery.ajax( options ) : 通過 HTTP 請求加載遠端資料

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

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

注意: 如果你指定了 dataType 選項,請確定伺服器傳回正确的 MIME 資訊,(如 xml 傳回 "text/xml")。錯誤的 MIME 類型可能導緻不可預知的錯誤。見

Specifying the Data Type for AJAX Requests

當設定 datatype 類型為 'script' 的時候,所有的遠端(不在同一個域中)POST請求都回轉換為GET方式。

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

jQuery 1.2 中,您可以跨域加載 JSON 資料,使用時需将資料類型設定為

JSONP

。使用

形式調用函數時,如 "myurl?callback=?" jQuery 将自動替換 ? 為正确的函數名,以執行回調函數。資料類型設定為 "jsonp" 時,jQuery 将自動調用回調函數。(這個我不是很懂)

參數清單:

參數名 類型 描述
url String (預設: 目前頁位址) 發送請求的位址。
type (預設: "GET") 請求方式 ("POST" 或 "GET"), 預設為 "GET"。注意:其它 HTTP 請求方法,如 PUT 和 DELETE 也可以使用,但僅部分浏覽器支援。
timeout Number 設定請求逾時時間(毫秒)。此設定将覆寫全局設定。
async Boolean (預設: true) 預設設定下,所有請求均為異步請求。如果需要發送同步請求,請将此選項設定為 false。注意,同步請求将鎖住浏覽器,使用者其它操作必須等待請求完成才可以執行。
beforeSend Function 發送請求前可修改 XMLHttpRequest 對象的函數,如添加自定義 HTTP 頭。XMLHttpRequest 對象是唯一的參數。
function (XMLHttpRequest) {
this; // the options for this ajax request
         }      
cache (預設: true) jQuery 1.2 新功能,設定為 false 将不會從浏覽器緩存中加載請求資訊。
complete 請求完成後回調函數 (請求成功或失敗時均調用)。參數: XMLHttpRequest 對象,成功資訊字元串。
function (XMLHttpRequest, textStatus) {
this; // the options for this ajax request
         }      
contentType (預設: "application/x-www-form-urlencoded") 發送資訊至伺服器時内容編碼類型。預設值适合大多數應用場合。
data Object, 發送到伺服器的資料。将自動轉換為請求字元串格式。GET 請求中将附加在 URL 後。檢視 processData 選項說明以禁止此自動轉換。必須為 Key/Value 格式。如果為數組,jQuery 将自動為不同值對應同一個名稱。如 {foo:["bar1", "bar2"]} 轉換為 '&foo=bar1&foo=bar2'。
dataType

預期伺服器傳回的資料類型。如果不指定,jQuery 将自動根據 HTTP 包 MIME 資訊傳回 responseXML 或 responseText,并作為回調函數參數傳遞,可用值:

"xml": 傳回 XML 文檔,可用 jQuery 處理。

"html": 傳回純文字 HTML 資訊;包含 script 元素。

"script": 傳回純文字 JavaScript 代碼。不會自動緩存結果。

"json": 傳回 JSON 資料 。

"jsonp":

格式。使用 形式調用函數時,如 "myurl?callback=?" jQuery 将自動替換 ? 為正确的函數名,以執行回調函數。
error (預設: 自動判斷 (xml 或 html)) 請求失敗時将調用此方法。這個方法有三個參數:XMLHttpRequest 對象,錯誤資訊,(可能)捕獲的錯誤對象。
function (XMLHttpRequest, textStatus, errorThrown) {
// 通常情況下textStatus和errorThown隻有其中一個有值 
         this; // the options for this ajax request
         }      
global (預設: true) 是否觸發全局 AJAX 事件。設定為 false 将不會觸發全局 AJAX 事件,如 ajaxStart 或 ajaxStop 。可用于控制不同的Ajax事件
ifModified (預設: false) 僅在伺服器資料改變時擷取新資料。使用 HTTP 包 Last-Modified 頭資訊判斷。
processData (預設: true) 預設情況下,發送的資料将被轉換為對象(技術上講并非字元串) 以配合預設内容類型 "application/x-www-form-urlencoded"。如果要發送 DOM 樹資訊或其它不希望轉換的資訊,請設定為 false。
success 請求成功後回調函數。這個方法有兩個參數:伺服器傳回資料,傳回狀态
function (data, textStatus) {
// data could be xmlDoc, jsonObj, html, text, etc...
         this; // the options for this ajax request
         }      

這裡有幾個Ajax事件參數:beforeSend ,success ,complete ,error 。我們可以定義這些事件來很好的處理我們的每一次的Ajax請求。注意一下,這些Ajax事件裡面的 this 都是指向Ajax請求的選項資訊的(請參考說 get() 方法時的this的圖檔)。

請認真閱讀上面的參數清單,如果你要用jQuery來進行Ajax開發,那麼這些參數你都必需熟知的。

示例代碼,擷取部落格園首頁的文章題目:

$.ajax({

type: "get",

url: "http://www.cnblogs.com/rss",

beforeSend: function(XMLHttpRequest){
//ShowLoading();
},
success: function(data, textStatus){

$(".ajax.ajaxResult").html("");

$("item",data).each(function(i, domEle){

$(".ajax.ajaxResult").append("<li>"+$(domEle).children("title").text()+"</li>");

});

},

complete: function(XMLHttpRequest, textStatus){
//HideLoading();
},
error: function(){
//請求出錯處理
}
});      

這裡将顯示首頁文章清單。

其他

jQuery.ajaxSetup( options ) : 設定全局 AJAX 預設選項。

設定 AJAX 請求預設位址為 "/xmlhttp/",禁止觸發全局 AJAX 事件,用 POST 代替預設 GET 方法。其後的 AJAX 請求不再設定任何選項參數。

$.ajaxSetup({

url: "/xmlhttp/",

global: false,

type: "POST"

});

$.ajax({ data: myData });      

serialize() 與 serializeArray()

serialize() : 序清單表格内容為字元串。

serializeArray() : 序列化表格元素 (類似 '.serialize()' 方法) 傳回 JSON 資料結構資料。

示例:

HTML代碼:

<p id="results"><b>Results: </b> </p>
<form>
<select name="single">
<option>Single</option>
<option>Single2</option>
</select>
<select name="multiple" multiple="multiple">
<option selected="selected">Multiple</option>
<option>Multiple2</option>
<option selected="selected">Multiple3</option>
</select><br/>
<input type="checkbox" name="check" value="check1"/> check1
<input type="checkbox" name="check" value="check2" 

checked="checked"/> check2
<input type="radio" name="radio" value="radio1" 

checked="checked"/> radio1
<input type="radio" name="radio" value="radio2"/> radio2

</form>      
jQuery Ajax 執行個體 全解析 (轉)

serializeArray() 結果為:

jQuery Ajax 執行個體 全解析 (轉)

以上轉自:http://www.cnblogs.com/yeer/archive/2009/07/23/1529460.html

部落格園大道至簡

http://www.cnblogs.com/jams742003/

轉載請注明:部落格園

繼續閱讀