js $.ajax stop,jQuery.ajaxStop() 函数详解
ajaxStop()函數(shù)用于為AJAX請求的ajaxStop事件綁定處理函數(shù)。
這是一個全局AJAX事件函數(shù),用于在ajaxStop事件被觸發(fā)時執(zhí)行綁定的事件處理函數(shù)。
jQuery官方文檔描述:無論什么時候,當(dāng)一個AJAX請求完成(無論成功或失敗)時,jQuery會檢查當(dāng)前是否還有其他活躍的(未完成的)AJAX請求。如果在進(jìn)程中沒有找到其他活躍的AJAX請求,jQuery就會觸發(fā)ajaxStop事件。此時,通過ajaxStop()函數(shù)綁定的所有事件處理函數(shù)都將被執(zhí)行。
簡而言之,當(dāng)一個AJAX請求結(jié)束的時候,此時沒有其他活躍的AJAX請求,該請求就會觸發(fā)ajaxStop事件。
一般而言,連續(xù)執(zhí)行多個AJAX請求,只有其中最后一個結(jié)束的AJAX請求會觸發(fā)ajaxStop事件。等到所有AJAX請求執(zhí)行完畢后,再次連續(xù)執(zhí)行多個AJAX請求,還是只有其中最后一個結(jié)束的AJAX請求會觸發(fā)ajaxStop事件。
如果某個AJAX請求被禁止觸發(fā)全局AJAX事件,則它不會被視為活躍的AJAX請求。
該函數(shù)必須在jQuery對象實(shí)例上調(diào)用,ajaxStop()將為每個匹配元素綁定事件處理函數(shù)。當(dāng)ajaxStop事件被觸發(fā)時,所有匹配元素上綁定的處理函數(shù)都將被調(diào)用。事件處理函數(shù)內(nèi)的this將指向當(dāng)前DOM元素。
你可以為同一元素多次調(diào)用該函數(shù),從而綁定多個事件處理函數(shù)。觸發(fā)事件時,jQuery會按照綁定的先后順序依次執(zhí)行綁定的事件處理函數(shù)。
從jQuery 1.8開始,該函數(shù)只能為document對象綁定事件處理函數(shù),為其他元素綁定的事件處理函數(shù)不會起作用。
如果在jQuery.ajax()或jQuery.ajaxSetup()中將選項(xiàng)參數(shù)global設(shè)為false,可以禁止該AJAX請求觸發(fā)全局的AJAX事件。
該函數(shù)屬于jQuery對象(實(shí)例)。
語法
jQuery 1.0 新增該函數(shù)。
jQueryObject.ajaxStop( handler )
參數(shù)
參數(shù)描述
handlerFunction類型觸發(fā)該事件時,需要執(zhí)行的事件處理函數(shù)。
返回值
ajaxStop()函數(shù)的返回值為jQuery類型,返回當(dāng)前jQuery對象本身。
示例&說明
關(guān)于ajaxStop事件和ajaxStop事件的觸發(fā)機(jī)制,你可以參考jQuery的jQuery.ajax()函數(shù)的部分源代碼。
通過以下源代碼,我們可以知道:jQuery會統(tǒng)計(jì)當(dāng)前活躍的AJAX請求數(shù)。每當(dāng)開始執(zhí)行一個AJAX請求時,會在活躍數(shù)上加1;每當(dāng)一個AJAX請求結(jié)束時,就在活躍數(shù)上減1。如果一個AJAX請求開始時,活躍數(shù)為0,則觸發(fā)ajaxStart事件;如果一個AJAX請求結(jié)束時,活躍數(shù)為0,則觸發(fā)ajaxStop事件。// jQuery.ajax()函數(shù)的開頭部分
var fireGlobals = s.global; // 是否允許觸發(fā)全局AJAX事件
// 如果允許觸發(fā)全局AJAX事件,并且活躍的AJAX請求數(shù)為0,則觸發(fā)ajaxStart事件
if ( fireGlobals && jQuery.active++ === 0 ) {
jQuery.event.trigger("ajaxStart");
}
// ... 省略中間的源代碼
// jQuery.ajax()函數(shù)的末尾部分
if ( fireGlobals ) {
globalEventContext.trigger( "ajaxComplete", [ jqXHR, s ] );
// 如果允許觸發(fā)全局事件,并且活躍的AJAX請求數(shù)為0,則觸發(fā)ajaxStop事件
if ( !( --jQuery.active ) ) {
jQuery.event.trigger("ajaxStop");
}
}
請參考以下HTML示例代碼:
CodePlayer專注于編程開發(fā)技術(shù)分享http://www.365mini.com以下是與ajaxStop()函數(shù)相關(guān)的jQuery示例代碼,以演示ajaxStop()函數(shù)的具體用法:
請注意:并不是先執(zhí)行的AJAX請求就一定先結(jié)束,這與整個AJAX請求過程中的網(wǎng)絡(luò)、數(shù)據(jù)量、相關(guān)代碼執(zhí)行時間等方面密切相關(guān)。下面的示例代碼均假設(shè)所有AJAX請求的用時相同,以便于解釋說明。
以下代碼請基于1.8之前版本的jQuery來運(yùn)行。var $divs = $("div");
$divs.ajaxStop( function(){
alert("處理函數(shù)1:當(dāng)前元素id為" + this.id );
} );
$divs.ajaxStop( function(){
alert("處理函數(shù)2:當(dāng)前元素id為" + this.id );
} );
// 點(diǎn)擊執(zhí)行AJAX請求
$("#btn").click( function(){
// 該AJAX請求結(jié)束時,下一個AJAX請求正在執(zhí)行,因此不會觸發(fā)ajaxStop事件,也不會彈出對話框
$.ajax( { url: "index.html" } );
// 該AJAX請求結(jié)束時,上一個AJAX請求已經(jīng)執(zhí)行完畢,因此會觸發(fā)ajaxStop事件
// 它會彈出6次對話框 ,因?yàn)楫?dāng)前頁面有3個div元素,我們?yōu)槊總€div元素綁定了2個事件處理函數(shù)
$.ajax( { url: "myurl.php" } );
} );
如果當(dāng)前jQuery為1.8及以上版本,上述jQuery代碼不會彈出對話框。因?yàn)閺膉Query 1.8開始,ajaxStop事件的處理函數(shù)必須綁定到document對象上才能生效。
因此,不論當(dāng)前jQuery為何版本,如果不是特殊需求,我們都應(yīng)該將ajaxStop事件的處理函數(shù)綁定到document對象上。var $divs = $("div");
$divs.ajaxStop( function(){
alert("處理函數(shù)1");
} );
$divs.ajaxStop( function(){
alert("處理函數(shù)2");
} );
// 點(diǎn)擊執(zhí)行AJAX請求
$("#btn").click( function(){
// 該AJAX請求結(jié)束時,下一個AJAX請求正在執(zhí)行,因此不會觸發(fā)ajaxStop事件,也不會彈出對話框
$.ajax( { url: "index.html" } );
// 該AJAX請求結(jié)束時,上一個AJAX請求已經(jīng)執(zhí)行完畢,因此會觸發(fā)ajaxStop事件
// 它會彈出2次對話框 ,因?yàn)槲覀優(yōu)閐ocument綁定了2個事件處理函數(shù)
$.ajax( { url: "myurl.php" } );
} );
現(xiàn)在,我們參考以下jQuery代碼。我們將第二個AJAX請求延遲3秒執(zhí)行(或其他能保證第一個AJAX請求執(zhí)行完畢的時間值),此時兩個AJAX請求都會彈出對話框。var $doc = $( document );
$doc.ajaxStop( function(){
alert("處理函數(shù)1" );
} );
$doc.ajaxStop( function(){
alert("處理函數(shù)2" );
} );
// 點(diǎn)擊執(zhí)行AJAX請求
$("#btn").click( function(){
// 該AJAX請求結(jié)束時,此時沒有其他活躍的AJAX請求(下一個請求尚未執(zhí)行),因此會觸發(fā)ajaxStop事件
// 它會彈出2次對話框
$.ajax( { url: "index.html" } );
// 延遲3秒執(zhí)行第二個AJAX請求
setTimeout( function(){
// 該AJAX請求結(jié)束時,此時沒有其他活躍的AJAX請求(上一個請求早已經(jīng)執(zhí)行完畢)
// 因此會觸發(fā)ajaxStop事件,會彈出2次對話框
$.ajax( { url: "myurl.php" } );
}, 3000);
} );
如果第二個AJAX請求被禁止觸發(fā)全局AJAX事件,則它不會被視作活躍的AJAX請求。第一個AJAX請求會觸發(fā)ajaxStop事件。var $doc = $( document );
$doc.ajaxStop( function(){
alert("處理函數(shù)1" );
} );
$doc.ajaxStop( function(){
alert("處理函數(shù)2" );
} );
// 點(diǎn)擊執(zhí)行AJAX請求
$("#btn").click( function(){
// 該AJAX請求開始時,此時沒有其他活躍的AJAX請求(下一個請求雖然尚未執(zhí)行完成,但它被禁止觸發(fā)全局AJAX事件,jQuery在檢查活躍請求時會忽略掉它)
// 因此會觸發(fā)ajaxStop事件,會彈出2次對話框
$.ajax( { url: "index.html" } );
// 該AJAX請求開始時,此時沒有其他活躍的AJAX請求,但它不會觸發(fā)ajaxStop事件
// 因?yàn)樗膅lobal選項(xiàng)為false,被禁止觸發(fā)任何AJAX事件,所以它不會彈出對話框
$.ajax( {
url: "myurl.php" ,
global: false // 禁止觸發(fā)全局AJAX事件
} );
} );
總結(jié)
以上是生活随笔為你收集整理的js $.ajax stop,jQuery.ajaxStop() 函数详解的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 友元函数的简单说明
- 下一篇: qt自定义按钮类,每个按钮自带一个右键弹