jQuery Ajax中的事件詳細(xì)介紹
Ajax會(huì)觸發(fā)很多事件。
有兩種事件,一種是局部事件,一種是全局事件:
局部事件:通過(guò)$.ajax來(lái)調(diào)用并且分配。
$.ajax({
beforeSend: function(){
// Handle the beforeSend event
},
complete: function(){
// Handle the complete event
}
// ...
});
全局事件,可以用bind來(lái)綁定,用unbind來(lái)取消綁定。這個(gè)跟click/mousedown/keyup等事件類(lèi)似。但他可以傳遞到每一個(gè)DOM元素上。
$("#loading").bind("ajaxSend", function(){ //使用bind
$(this).show();
}).ajaxComplete(function(){ //直接使用ajaxComplete
$(this).hide();
});
當(dāng)然,你某一個(gè)Ajax請(qǐng)求不希望產(chǎn)生全局的事件,則可以設(shè)置global:false
$.ajax({
url: "test.html",
global: false,
// ...
});
事件的順序如下:
ajaxStart 全局事件
開(kāi)始新的Ajax請(qǐng)求,并且此時(shí)沒(méi)有其他ajax請(qǐng)求正在進(jìn)行。
beforeSend 局部事件
當(dāng)一個(gè)Ajax請(qǐng)求開(kāi)始時(shí)觸發(fā)。如果需要,你可以在這里設(shè)置XHR對(duì)象。
ajaxSend 全局事件
請(qǐng)求開(kāi)始前觸發(fā)的全局事件
success 局部事件
請(qǐng)求成功時(shí)觸發(fā)。即服務(wù)器沒(méi)有返回錯(cuò)誤,返回的數(shù)據(jù)也沒(méi)有錯(cuò)誤。
ajaxSuccess 全局事件
全局的請(qǐng)求成功
error 局部事件
僅當(dāng)發(fā)生錯(cuò)誤時(shí)觸發(fā)。你無(wú)法同時(shí)執(zhí)行success和error兩個(gè)回調(diào)函數(shù)。
ajaxError 全局事件
全局的發(fā)生錯(cuò)誤時(shí)觸發(fā)
complete 局部事件
不管你請(qǐng)求成功還是失敗,即便是同步請(qǐng)求,你都能在請(qǐng)求完成時(shí)觸發(fā)這個(gè)事件。
ajaxComplete 全局事件
全局的請(qǐng)求完成時(shí)觸發(fā)
ajaxStop 全局事件
當(dāng)沒(méi)有Ajax正在進(jìn)行中的時(shí)候,觸發(fā)。
局部事件回調(diào)的參數(shù)在文檔中寫(xiě)的很清楚了,這里就不累述了。
全局事件中,除了ajaxStart和ajaxStop之外,其他的事件都有3個(gè)參數(shù)
event, XMLHttpRequest, ajaxOptions
第一個(gè)是事件,第二個(gè)是XHR對(duì)象,第三個(gè)參數(shù)最有用,是當(dāng)時(shí)調(diào)用這個(gè)ajax的時(shí)候的參數(shù)。
對(duì)于ajaxError,還有第四個(gè)參數(shù)thrownError,只有當(dāng)異常發(fā)生時(shí)才會(huì)被傳遞。
我們可以利用ajaxOptions來(lái)寫(xiě)一個(gè)全局的ajax事件。
比如
$("#msg").beforeSend(function(e,xhr,o) {
$(this).html("正在請(qǐng)求"+o.url);
}).ajaxSuccess(function(e,xhr,o) {
$(this).html(o.url+"請(qǐng)求成功");
}).ajaxError(function(e,xhr,o) {
$(this).html(o.url+"請(qǐng)求失敗");
});
對(duì)于這個(gè)例子,
這樣我們就可以很方便的全局地在某個(gè)地方顯示當(dāng)前的ajax狀態(tài)。
當(dāng)然,之前說(shuō)了,第三個(gè)參數(shù)實(shí)際上是傳遞給ajax的參數(shù)。get/post/load/getScript/getJSON等方法本質(zhì)上都是調(diào)用ajax方法的,所以ajaxOptions.url屬性總是有效的。
還有更豐富的例子。
如果你用ajax調(diào)用,還可以傳遞自定義參數(shù)。下面的例子我就自定義了一個(gè)msg參數(shù)給了ajax調(diào)用
//自定義參數(shù)msg
$.ajax({url:"test1.html",type:"get",msg:"頁(yè)面一"});
$.ajax({url:"test2.html",type:"get",msg:"頁(yè)面二"});
$.ajax({url:"test3.html",type:"get",msg:"頁(yè)面三"});
$.ajax({url:"test4.html",type:"get",msg:"頁(yè)面四"});
//這里就能獲取到自定義參數(shù)msg。
//這可以用來(lái)區(qū)別對(duì)待不同的ajax請(qǐng)求。
$("#msg").beforeSend(function(e,xhr,o) {
$(this).html("正在請(qǐng)求"+o.msg);
}).ajaxSuccess(function(e,xhr,o) {
$(this).html(o.msg+"請(qǐng)求成功");
}).ajaxError(function(e,xhr,o) {
$(this).html(o.msg+"請(qǐng)求失敗");
});
最后對(duì)于load方法,還有話說(shuō)。
其他的簡(jiǎn)易ajax方法,比如get,post,getJSON等,他們的回調(diào)函數(shù)都是設(shè)置了success回調(diào)。
而只有l(wèi)oad設(shè)置的其實(shí)是complete回調(diào)。
所以,load里設(shè)置的回調(diào)函數(shù)的參數(shù)應(yīng)該有2個(gè)。
XMLHttpRequest和textStatus
但實(shí)際上也并非如此。
load的回調(diào)有三個(gè)參數(shù)
XMLHttpRequest.responseText, textStatus, XMLHttpRequest
所以,你可以在load的回調(diào)里
通過(guò)textStatus==”success”或者textStatus==”error”來(lái)判斷是否調(diào)用成功。
或者用XMLHttpRequest.status屬性判斷是200還是404或者其他的。
這點(diǎn)上,我認(rèn)為比普通的get/post等方法更先進(jìn)。如果要單數(shù)設(shè)置每get的error是不可能的。但是設(shè)置一個(gè)全局的ajaxError其實(shí)也是不錯(cuò)的選擇。
相關(guān)文章
jQueryUI DatePicker 添加時(shí)分秒
本文主要介紹jQueryUI DatePicker添加時(shí)分秒的方法,簡(jiǎn)單實(shí)用,需要的朋友可以參考下。2016-06-06
jquery validate.js表單驗(yàn)證的基本用法入門(mén)
jquery.validate.js是jquery下的一個(gè)驗(yàn)證插件,功能比較強(qiáng)大,早就有所耳聞但是一只沒(méi)有動(dòng)手用過(guò),現(xiàn)在在于能夠研究一下了。2010-05-05
jQuery插件HighCharts繪制的2D堆柱狀圖效果示例【附demo源碼下載】
這篇文章主要介紹了jQuery插件HighCharts繪制的2D堆柱狀圖效果,結(jié)合完整實(shí)例形式分析了jQuery插件HighCharts繪制2D柱狀圖的實(shí)現(xiàn)技巧與相關(guān)注意事項(xiàng),并附帶demo源碼供讀者下載參考,需要的朋友可以參考下2017-03-03
jQuery中hover與mouseover和mouseout的區(qū)別分析
這篇文章主要介紹了jQuery中hover與mouseover和mouseout的區(qū)別,結(jié)合實(shí)例分析了jQuery中hover與mouseover和mouseout的區(qū)別與使用技巧,需要的朋友可以參考下2015-12-12
40個(gè)有創(chuàng)意的jQuery圖片和內(nèi)容滑動(dòng)及彈出插件收藏集之二
在網(wǎng)頁(yè)的首頁(yè)或圖片專(zhuān)題頁(yè)面很多地方都會(huì)用到圖片滑動(dòng)插件來(lái)循環(huán)切換多張圖片,并且用戶(hù)可以點(diǎn)擊左右按鈕來(lái)切換圖片。2011-12-12
jQuery動(dòng)畫(huà)效果相關(guān)方法實(shí)例分析
這篇文章主要介紹了jQuery動(dòng)畫(huà)效果相關(guān)方法,結(jié)合實(shí)例形式較為詳細(xì)的分析了jQuery實(shí)現(xiàn)動(dòng)畫(huà)效果所用到的常見(jiàn)方法與相關(guān)注意事項(xiàng),需要的朋友可以參考下2015-12-12
jQuery實(shí)現(xiàn)最簡(jiǎn)單實(shí)用的分秒倒計(jì)時(shí)
這篇文章主要為大家詳細(xì)介紹了jQuery實(shí)現(xiàn)最簡(jiǎn)單實(shí)用的分秒倒計(jì)時(shí),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-02-02
jquery動(dòng)態(tài)改變onclick屬性導(dǎo)致失效的問(wèn)題解決方法
onclick屬性失效的問(wèn)題,相信很多的朋友都有遇到過(guò)吧,jquery動(dòng)態(tài)改變onclick屬性就會(huì)導(dǎo)致此問(wèn)題的發(fā)生,解決方法如下,希望對(duì)大家有所幫助2013-12-12
JQuery 選擇器 xpath 語(yǔ)法應(yīng)用
我們根據(jù)實(shí)例來(lái)解釋JQuery選擇器(selectors)中xpath幾種常用的用法2010-05-05

