jQuery Ajax 實例 全解析(轉載)
jQuery Ajax 實例 全解析
jQuery確實是一個挺好的輕量級的JS框架,能幫助我們快速的開發JS應用,并在一定程度上改變了我們寫JavaScript代碼的習慣。
廢話少說,直接進入正題,我們先來看一些簡單的方法,這些方法都是對jQuery.ajax()進行封裝以方便我們使用的方法,當然,如果要處理復雜的邏輯,還是需要用到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請求的選項配置信息:
3. jQuery.post( url, [data], [callback], [type] ) :使用POST方式來進行異步請求
參數:
url (String) : 發送請求的URL地址.
data (Map) : (可選) 要發送給服務器的數據,以 Key/value 的鍵值對形式表示。
callback (Function) : (可選) 載入成功時回調函數(只有當Response的返回狀態是success才是調用該方法)。
type (String) : (可選)官方的說明是:Type of data to be sent。其實應該為客戶端請求的類型(JSON,XML,等等)
這是一個簡單的 POST 請求功能以取代復雜 $.ajax 。請求成功時可調用回調函數。如果需要在出錯時執行函數,請使用 $.ajax。示例代碼:
Ajax.aspx:
Response.ContentType = "application/json"; Response.Write("{result: '" + Request["Name"] + ",你好!(這消息來自服務器)'}");
$.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":
如果你設置了請求的格式為"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文件.下面看一些示例代碼:
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。使用 JSONP 形式調用函數時,如 "myurl?callback=?" jQuery 將自動替換 ? 為正確的函數名,以執行回調函數。數據類型設置為 "jsonp" 時,jQuery 將自動調用回調函數。(這個我不是很懂)
參數列表:
function (XMLHttpRequest) { this; // the options for this ajax request }
function (XMLHttpRequest, textStatus) { this; // the options for this ajax request }
預期服務器返回的數據類型。如果不指定,jQuery 將自動根據 HTTP 包 MIME 信息返回 responseXML 或 responseText,并作為回調函數參數傳遞,可用值:
"xml": 返回 XML 文檔,可用 jQuery 處理。
"html": 返回純文本 HTML 信息;包含 script 元素。
"script": 返回純文本 JavaScript 代碼。不會自動緩存結果。
"json": 返回 JSON 數據 。
"jsonp": JSONP 格式。使用 JSONP 形式調用函數時,如 "myurl?callback=?" jQuery 將自動替換 ? 為正確的函數名,以執行回調函數。
function (XMLHttpRequest, textStatus, errorThrown) { // 通常情況下textStatus和errorThown只有其中一個有值 this; // the options for this ajax request }
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("
這里將顯示首頁文章列表。
其他
jQuery.ajaxSetup( options ) : 設置全局 AJAX 默認選項。
設置 AJAX 請求默認地址為 "/xmlhttp/",禁止觸發全局 AJAX 事件,用 POST 代替默認 GET 方法。其后的 AJAX 請求不再設置任何選項參數。
jQuery 代碼:
$.ajaxSetup({ url: "/xmlhttp/", global: false, type: "POST" }); $.ajax({ data: myData });
serialize() 與 serializeArray()
serialize() : 序列表表格內容為字符串。
serializeArray() : 序列化表格元素 (類似 '.serialize()' 方法) 返回 JSON 數據結構數據。
示例:
HTML代碼:
Results:
serializeArray() 結果為:
標簽: jquery, Ajax, jquery ajax, jquery load, jquery教程, jquery加載遠程
綠色通道: 好文要頂 關注我 該文 與我聯系
吊兒郎當
關注 - 2
粉絲 - 57
+加關注
49
0
(請您對文章做出評價)
? 博主上一篇: Mercurial使用簡單介紹
? 博主下一篇: CSS hack:針對IE6,IE7,IE8,IE9,firefox顯示不同效果
posted @ 2009-07-23 15:46 吊兒郎當 閱讀(266600) 評論( 38) 編輯
評論列表
有意思
支持(0) 反對(0)
寫的不錯,謝謝
支持(0) 反對(0)
好文章 了
支持(0) 反對(0)
幫我解決實際問題,受益匪淺。
支持(0) 反對(0)
額,貌似是不是該加個轉載的地址呢
支持(0) 反對(0)
請教一個問題。怎么用 ajax提交一個data到服務器,然后服務器回發回來一個流。相當于文件下載一樣。不知道怎么寫啊。
支持(0) 反對(0)
原文地址:
http://www.cnblogs.com/qleelulu/archive/2008/04/21/1163021.html
支持(0) 反對(0)
好文!
支持(0) 反對(0)
$(".ajax.load").load(" http://www.cnblogs.com/yeer/archive/2009/06/10/1500682.html .post")
這種url( http://www形式的),我在本機上測試,老是加載不了。在firebug下的“控制臺”的“所有”選項卡下:有一個圓圈的叉叉
支持(0) 反對(0)
怎么用 ajax提交一個data到服務器
支持(0) 反對(0)
謝謝,很適用,講解清晰!了
支持(0) 反對(0)
寫的不錯!學習下!
支持(0) 反對(0)
我正在尋找,太好了www.aimeiba.org/blog
支持(0) 反對(0)
學習學習,這個實例很不錯
支持(0) 反對(0)
請教下 ,你的圖是在哪截取的啊,我的firebug里面怎么找不到啊
支持(0) 反對(0)
受益匪淺,謝謝了。
支持(0) 反對(0)
受教了。。呵呵。。
支持(0) 反對(0)
不錯.................
支持(0) 反對(0)
謝謝 加深了理解
支持(0) 反對(0)
@Rainr
可以忘客戶端輸出一個請求(Servlet或是Handler),然后再這里面做文件下載操作
支持(0) 反對(0)
向你學習了。
支持(0) 反對(0)
謝謝,很好理解~~~
支持(0) 反對(0)
請問一個發送Ajax請求的簡單問題:
我要實現在發送請求之前顯示一個loading圖片,表示正在執行。
但是有時這個請求速度很快,很快就完成了,導致loading圖片一閃而過。
有沒有方法來實現【如果請求時間大于2秒時則啟動loading畫面】
或者【總是顯示loading圖片2秒再去執行請求】
支持(0) 反對(0)
@Zigzag
可以延時執行,如php中使用 sleep(2)
支持(0) 反對(0)
好好好
支持(0) 反對(0)
如果是轉載他人文章則請標注來源
支持(0) 反對(0)
真是好文章啊!!最近在寫jquery 總是出現錯誤。很郁悶啊。希望大神給解決下:
有時候正常 有時候就出現這種錯誤。 public void ProcessRequest(HttpContext context)
{
eModel.Code = 0;
try
遠程這邊 走到第一句 就沒走了。直接回到Ajax 的error函數里面了。怎么解決啊??網上找了半天也沒找到好方法。
支持(0) 反對(0)
本文參考文章地址: http://www.phpernote.com/article-9-299.html
支持(0) 反對(0)
本文參考文章地址: http://www.phpernote.com/article-9-299.html
支持(0) 反對(0)
內容很好,值得
支持(0) 反對(0)
等高檔滾動條
啊啊發
支持(0) 反對(0)
不錯。
支持(0) 反對(0)
總結的非常不錯哦
支持(0) 反對(0)
dataType
支持(0) 反對(0)
dataType dataType
支持(0) 反對(0)
dataType
支持(0) 反對(0)
dataType dataType dataType dataType
支持(0) 反對(0)
dataType dataType dataType dataType
Ajax jQuery jQuery UI
版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。