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