全局Ajax事件處理程序:.ajaxStop()

(PS:這篇文章是官網API文件的非專業翻譯+個人意見,並且重新排版過)

全局Ajax事件處理程序:.ajaxStop()

註冊一個處理程序,當所有的Ajax要求都已經完成時,該處理程序會被呼叫。 這是一個Ajax事件(AjaxEvent)。

.ajaxStop( handler() )    // version added: 1.0
  • handler()
    Type: Function()
    The function to be invoked.

當一個Ajax要求完成時,jQuery會檢查是否還有其他尚未完成的Ajax要求。如果沒有,jQuery就會觸發ajaxStop事件,此時,每個用.ajaxStop()註冊的處理程序都會被執行。除此之外,若是最後一個未完成的Ajax要求被beforeSend 回呼函式傳回的false 取消,ajaxStop事件也會被觸發。

為了實際觀察這個方法,我們建立了一個基本的Ajax載入要求:

<div class="trigger">Trigger</div>
<div class="result"></div>
<div class="log"></div>

將下面的事件處理器附加到文件上:

$( document).ajaxStop(function() {
  $( ".log").text( "Triggered ajaxStop handler." ); 
});
/*下面是官網原始的程式碼,不過這似乎不符合他自己說的,
只能添加在document上(從1.8版開始,事實上下面程式碼在1.91版確實也無法運作,
所以我把程式碼做了修改)
$( ".log" ).ajaxStop(function() {
  $( this ).text( "Triggered ajaxStop handler." ); 
});
*/

現在,用jQuery方法來建立一個Ajax要求:

$( ".trigger" ).click(function() { 
  $( ".result" ).load( "ajax/test.html" ); 
})

當使用者按下具有trigger類別的元素時,Ajax要求會完成,log 訊息就會出現。

從jQuery1.8開始,.ajaxStop()方法應該只被附加到document上。

其他注意事項:

  • 假如$.ajax()或是$.ajaxSetup()在呼叫時設定global選項為false,那.ajaxStop()方法將不會被觸發。

範例:

在所有Ajax要求停止時,隱藏載入訊息。

	$( document ).ajaxStop(function() {
  $( "#loading" ).hide();
});
 
 

  按個讚!~支持本站!~

FB推薦載入中