jQuery Ajax中的事件詳細介紹
Ajax會觸發(fā)很多事件。
有兩種事件,一種是局部事件,一種是全局事件:
局部事件:通過$.ajax來調(diào)用并且分配。
$.ajax({
beforeSend: function(){
// Handle the beforeSend event
},
complete: function(){
// Handle the complete event
}
// ...
});
全局事件,可以用bind來綁定,用unbind來取消綁定。這個跟click/mousedown/keyup等事件類似。但他可以傳遞到每一個DOM元素上。
$("#loading").bind("ajaxSend", function(){ //使用bind
$(this).show();
}).ajaxComplete(function(){ //直接使用ajaxComplete
$(this).hide();
});
當然,你某一個Ajax請求不希望產(chǎn)生全局的事件,則可以設(shè)置global:false
$.ajax({
url: "test.html",
global: false,
// ...
});
事件的順序如下:
ajaxStart 全局事件
開始新的Ajax請求,并且此時沒有其他ajax請求正在進行。
beforeSend 局部事件
當一個Ajax請求開始時觸發(fā)。如果需要,你可以在這里設(shè)置XHR對象。
ajaxSend 全局事件
請求開始前觸發(fā)的全局事件
success 局部事件
請求成功時觸發(fā)。即服務(wù)器沒有返回錯誤,返回的數(shù)據(jù)也沒有錯誤。
ajaxSuccess 全局事件
全局的請求成功
error 局部事件
僅當發(fā)生錯誤時觸發(fā)。你無法同時執(zhí)行success和error兩個回調(diào)函數(shù)。
ajaxError 全局事件
全局的發(fā)生錯誤時觸發(fā)
complete 局部事件
不管你請求成功還是失敗,即便是同步請求,你都能在請求完成時觸發(fā)這個事件。
ajaxComplete 全局事件
全局的請求完成時觸發(fā)
ajaxStop 全局事件
當沒有Ajax正在進行中的時候,觸發(fā)。
局部事件回調(diào)的參數(shù)在文檔中寫的很清楚了,這里就不累述了。
全局事件中,除了ajaxStart和ajaxStop之外,其他的事件都有3個參數(shù)
event, XMLHttpRequest, ajaxOptions
第一個是事件,第二個是XHR對象,第三個參數(shù)最有用,是當時調(diào)用這個ajax的時候的參數(shù)。
對于ajaxError,還有第四個參數(shù)thrownError,只有當異常發(fā)生時才會被傳遞。
我們可以利用ajaxOptions來寫一個全局的ajax事件。
比如
$("#msg").beforeSend(function(e,xhr,o) {
$(this).html("正在請求"+o.url);
}).ajaxSuccess(function(e,xhr,o) {
$(this).html(o.url+"請求成功");
}).ajaxError(function(e,xhr,o) {
$(this).html(o.url+"請求失敗");
});
對于這個例子,
這樣我們就可以很方便的全局地在某個地方顯示當前的ajax狀態(tài)。
當然,之前說了,第三個參數(shù)實際上是傳遞給ajax的參數(shù)。get/post/load/getScript/getJSON等方法本質(zhì)上都是調(diào)用ajax方法的,所以ajaxOptions.url屬性總是有效的。
還有更豐富的例子。
如果你用ajax調(diào)用,還可以傳遞自定義參數(shù)。下面的例子我就自定義了一個msg參數(shù)給了ajax調(diào)用
//自定義參數(shù)msg
$.ajax({url:"test1.html",type:"get",msg:"頁面一"});
$.ajax({url:"test2.html",type:"get",msg:"頁面二"});
$.ajax({url:"test3.html",type:"get",msg:"頁面三"});
$.ajax({url:"test4.html",type:"get",msg:"頁面四"});
//這里就能獲取到自定義參數(shù)msg。
//這可以用來區(qū)別對待不同的ajax請求。
$("#msg").beforeSend(function(e,xhr,o) {
$(this).html("正在請求"+o.msg);
}).ajaxSuccess(function(e,xhr,o) {
$(this).html(o.msg+"請求成功");
}).ajaxError(function(e,xhr,o) {
$(this).html(o.msg+"請求失敗");
});
最后對于load方法,還有話說。
其他的簡易ajax方法,比如get,post,getJSON等,他們的回調(diào)函數(shù)都是設(shè)置了success回調(diào)。
而只有l(wèi)oad設(shè)置的其實是complete回調(diào)。
所以,load里設(shè)置的回調(diào)函數(shù)的參數(shù)應(yīng)該有2個。
XMLHttpRequest和textStatus
但實際上也并非如此。
load的回調(diào)有三個參數(shù)
XMLHttpRequest.responseText, textStatus, XMLHttpRequest
所以,你可以在load的回調(diào)里
通過textStatus==”success”或者textStatus==”error”來判斷是否調(diào)用成功。
或者用XMLHttpRequest.status屬性判斷是200還是404或者其他的。
這點上,我認為比普通的get/post等方法更先進。如果要單數(shù)設(shè)置每get的error是不可能的。但是設(shè)置一個全局的ajaxError其實也是不錯的選擇。
相關(guān)文章
jQuery lazyload 的重復(fù)加載錯誤以及修復(fù)方法
jQuery lazyload是一款延遲加載圖片的的插件,原意是按需加載,當圖片出現(xiàn)在可視區(qū)域時進行加載,但是官方的插件經(jīng)過firebug的檢測可知,并不能節(jié)省流量開支,反而有重復(fù)加載的現(xiàn)象。2010-11-11jQuery實現(xiàn)鼠標響應(yīng)式透明度漸變動畫效果示例
這篇文章主要介紹了jQuery實現(xiàn)鼠標響應(yīng)式透明度漸變動畫效果,涉及jQuery事件響應(yīng)及動態(tài)修改頁面元素屬性相關(guān)操作技巧,需要的朋友可以參考下2018-02-02jQuery Easyui加載表格出錯時在表格中間顯示自定義的提示內(nèi)容
這篇文章主要介紹了jQuery Easyui加載表格出錯時在表格中間顯示自定義的提示內(nèi)容的相關(guān)資料,需要的朋友可以參考下2016-12-12jquery實現(xiàn)Li滾動時滾動條自動添加樣式的方法
這篇文章主要介紹了jquery實現(xiàn)Li滾動時滾動條自動添加樣式的方法,實例分析了jquery響應(yīng)鼠標事件及動態(tài)添加樣式的相關(guān)技巧,需要的朋友可以參考下2015-08-08jQuery刪除/清空指定元素的所有子節(jié)點實例代碼
這篇文章主要給大家介紹了關(guān)于jQuery刪除/清空指定元素的所有子節(jié)點,文中通過示例代碼介紹的非常詳細,對大家學習或者使用jQuery具有一定的參考學習價值,需要的朋友們下面來一起學習學習吧2019-07-07基于jQuery實現(xiàn)動態(tài)數(shù)字展示效果
Jq數(shù)據(jù)列表動態(tài)效果,動態(tài)更新,支持Ajax動態(tài)刷新。下面小編給大家介紹下基于jQuery實現(xiàn)動態(tài)數(shù)字展示效果,需要的朋友可以參考下2015-08-08Jquery通過JSON字符串創(chuàng)建JSON對象
這篇文章主要介紹了Jquery如何通過JSON字符串創(chuàng)建JSON對象,并附詳細示例,需要的朋友可以參考下2014-08-08