成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

jQuery Ajax請求狀態管理器

開發 前端
無論有多么接近,通過客戶端與服務端的一來一回,必定會有等待加載數據的時間。所以,大多數網站都通過一個Gif動態圖標或‘Loading...’等字樣來告知用戶數據還在加載中。

現在的網站,在一個網頁中有異步請求甚至許多個異步請求已經不足為奇。Ajax已經成為了現在網站必須的基本功能,使網頁應用更接近于桌面應用。

然而,無論有多么接近,通過客戶端與服務端的一來一回,必定會有等待加載數據的時間。所以,大多數網站都通過一個Gif動態圖標或‘Loading...’等字樣來告知用戶數據還在加載中。但有時候這個問題會非常繁瑣和麻煩,要么將這個‘Loading’顯示在ajax請求之前,然后在ajax成功后隱藏它,或者將它寫在jquery的ajax的全局事件jQuery.ajaxStart()jQuery.ajaxStop()中來控制整個頁面的ajax狀態。前者方法使用起來太瑣碎,每個請求都要寫一遍這個‘Loading’,而且無論請求成功或失敗都需要隱藏它。后者是全局的,也就是整個頁面的請求狀態,有時候無法滿足在局部顯示加載狀態的要求。

為了解決這些問題,我開發了jQuery的插件,名為:Ajax請求狀態管理器。使用這個插件可以讓loading不再那么麻煩了。你可以在觸發ajax請求前,用該插件事先添加寫好所有請求,你要做的只是在用戶交互的事件中執行下.request()方法。你可以將一個頁面上所有請求設置為獨立顯示loading,也可以設置為全局顯示(只顯示一個loading)。下面是插件的具體使用方法:

自定義loading的css樣式:

  1. .state-loading { background: #fff url(images/icon-ajax-loader.gif) ... }  

引用jquery***版本文件:

  1. <script src="http://ajax.googleapis.com/ajax/libs/jquery/1/jquery.js"></script>  

注意:該插件只在jquery1.4.4及之后的版本中測試通過。

引用Ajax請求狀態管理器插件文件:

  1. <script src="js/jquery-ajaxloader.js"></script>  

在jquery的ready事件中執行.install()方法:

  1. $.loader.install( className, isGlobal );  

參數說明:

className:string,表示你自定義的loading的class名稱,比如上面css定義的state-loading。

isGlobal:boolean,定義是否是全局顯示還是獨立顯示loading,默認值是true,該參數可以省略。

添加所需的ajax請求參數和成功后的回調方法:

  1. $.loader( key ).add( modules, settings , callback );  

參數說明:

key:string,通過這個key來創建或獲取指定模塊的加載器。當然,同一個key可以執行多次add()方法來添加不同的module,但是settings和callback是對于這個key是共享的,所以之后添加的settings和callback會覆蓋之前的。

modules:jquery object,一個頁面中同一個請求可以處理多個模塊的數據,所以,如果之前install()方法是設置為false的,在執行ajax請求時,添加到這個loader的所有module都會顯示loading狀態。

settings:map,jquery的ajax settings參數,但不要設置ajax事件,這樣會覆蓋插件中的回調方法,默認請求類型為GET。

callback:function,成功后的回調函數,它有一個參數data,默認是json類型返回的對象。

add()方法返回一個由'module'前綴的字符串數組,比如你添加了3個元素,那結果為['module1', 'module2', 'module3']。你可以通過返回的數組來刪除指定的其中一個模塊的loading,也可以不指定,也就是全部刪除,當然如果你需要這樣做的話。

remove()方法刪除指定的模塊:

  1. $.loader( key ).remove( moduleId ); 

參數說明:

moduleId:string或者array,指定為string的話會刪除其中一個module,指定為數組會批量刪除模塊,如果未指定參數,會將模塊全部刪除。

示例

添加2個模塊到名為userinfo的加載器中:

  1. var id1 = $.loader( 'userinfo' ).add(  
  2.     $( '#userinfo, #top-userinfo' ),   
  3.     { url: 'server/userinfo.php' },   
  4.     function( data ) {  
  5.         updateContent( $( '#userinfo, #topsection, #footer-userinfo' ), data );  
  6.     }  
  7. ); 

再添加一個模塊到userinfo的加載器中:

  1. var id2 = $.loader( 'userinfo' ).add( $('#footer-userinfo') );  
  2. var idList = id1.concat( id2 );  
  3. // result: [ 'module1', 'module2', 'module3' ] 

刪除第2個模塊的loading,也就是‘#top-userinfo’:

  1. var ret = $.loader( 'userinfo' ).remove( idList[1] );  
  2. // result: true, modules: [ 'module1', 'module3' ] 

在交互事件中執行.request()方法:$.loader( key ).request();

當然,你也可以拋棄之前add的ajax settings和callback,在交互事件中自己寫$.ajax或$.get等。然后在請求前調用$.loader( key ).show(),在回調函數內調用$.loader( key ).hide()。這樣也可以靈活控制loading的狀態。

示例

  1. $( '#getUserInfo' ).bind( 'click', function() {  
  2.     $.loader( 'userinfo' ).request();  
  3. }); 

你也可以從新重新寫請求:

  1. $( '#getUserInfo' ).bind( 'click', function() {  
  2.     $.loader( 'userinfo' ).show();  
  3.     $.get( 'server/userinfo.php', function( data ) {  
  4.         $.loader( 'userinfo' ).hide();  
  5.         updateContent( $( '#userinfo, #topsection, #footer-userinfo' ), data );  
  6.     })  
  7. }); 

注意:一個請求反復觸發時,管理器會執行abor()來阻止之前未完成的請求,重新發布新的請求,然而如果你在頁面中通過jquery的ajaxError事件輸出錯誤信息,會把該信息一并認為是錯誤的,所以如果有必要的話,需要你自行過濾。

示例

  1. // 輸出錯誤日志  
  2. $( 'body' ).bind( 'ajaxError', function( event, xhr, setting, thrownError ) {  
  3.     // 過濾掉 abort 的錯誤信息  
  4.     if ( xhr.status === 0 || xhr.readyState === 0 || xhr.statusText === 'abort' ) {  
  5.         return;  
  6.     }  
  7.     $( '#log' ).append( '<p>' + thrownError + '</p>' );  
  8. }); 

打包下載:Ajax請求狀態管理器。

原文鏈接:http://www.cnblogs.com/nicolaszhao/archive/2012/04/25/2470080.html

責任編輯:張偉 來源: nicolaszhao的博客
相關推薦

2009-08-05 13:50:23

ASP.NET狀態管理

2009-05-25 09:57:10

Ajax文件管理Web開發

2010-12-28 14:53:29

服務器管理器

2010-01-04 19:22:49

Silverlight

2009-02-01 10:17:22

布局管理器LayoutManagGUI

2020-12-25 07:41:36

KubernetesOpenKruise應用

2013-03-29 12:52:14

Android位置管理

2020-03-12 18:34:30

Windows 10Windows任務管理器

2015-12-08 12:17:04

2009-09-29 09:44:52

Hibernate事務

2012-04-23 10:49:04

AWTJava

2011-06-30 09:31:54

Chrome OS

2009-07-22 08:54:32

Oracle恢復管理器

2020-03-09 11:43:35

RustCargo編程語言

2020-10-12 09:00:00

Firefox任務管理器瀏覽器

2011-06-10 09:29:36

Qt Creator 布局管理器

2023-08-15 15:09:18

LinuxCompiz

2020-12-03 12:06:54

HarmonyOS

2023-11-25 09:31:20

Go事件管理器

2023-03-27 10:40:09

點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 天天艹逼网 | 91精品一区二区三区久久久久 | 精品一级毛片 | 黑人巨大精品欧美一区二区免费 | 国产精品一区二区不卡 | 日韩一二三区视频 | 在线看成人av| 欧美久久久久久 | 中文字幕av网站 | 欧美福利一区 | 亚洲a视频 | 成人av网站在线观看 | 日本午夜网 | 久久大| 免费黄色在线 | 午夜综合 | 在线一区二区三区 | 久久久久国产精品一区二区 | 久久精品免费观看 | 国产精品免费小视频 | 亚洲欧美高清 | 成人影院免费视频 | 亚州成人 | www.99re5.com| 日韩视频一区二区 | 久久精品成人 | 中文字幕亚洲区一区二 | 日韩国产中文字幕 | 精品亚洲永久免费精品 | 国产一区二区精品在线 | 亚洲国产精品福利 | 亚洲欧美在线视频 | 成人精品鲁一区一区二区 | 日韩精品欧美精品 | 日本成人久久 | 欧美在线天堂 | 精品成人免费一区二区在线播放 | 亚洲午夜精品一区二区三区他趣 | 本道综合精品 | 亚洲一区二区在线视频 | 中文字幕亚洲区一区二 |