DIV CSS 佈局教程網

 DIV+CSS佈局教程網 >> 網頁腳本 >> JavaScript入門知識 >> AJAX入門 >> AJAX詳解 >> 基本的封裝-Ajax之一
基本的封裝-Ajax之一
編輯:AJAX詳解     

Ajax,或許已經是老掉牙的話題。我學習總結一下。大概會有6篇,從基本的Ajax直至高級的應用。最後會形成一個實用的AJax工具庫。

 

創建一個基本的AJax應用不需要太多的代碼,大概三個步驟,幾十行代碼即可。

1,創建AJax的核心對象XMLHttPRequest

因為浏覽器之間的不兼容,IE7之前的版本並沒有原生的XMLhttpRequest對象卻實現為ActiveX對象。
互聯網及各種書籍中有著多種創建方式,有的復雜很多行代碼,有的則簡潔很少代碼。當然復雜的考慮的情形更多一些。如下幾乎將IE中所有的情況都考慮到了

vIEw sourceprint?01 function cretaeXHR(){ 

02     try{ return new XMLHttpRequest();}catch(e){} 

03     try{ return new ActiveXObject('Msxml2.XMLHTTP.6.0');}catch(e){} 

04     try{ return new ActiveXObject('Msxml2.XMLHTTP.4.0');}catch(e){} 

05     try{ return new ActiveXObject('Msxml2.XMLHTTP.3.0');}catch(e){} 

06     try{ return new ActiveXObject('Msxml2.XMLHTTP');}catch(e){} 

07     try{ return new ActiveXObject('MSXML3.XMLHTTP');}catch(e){} 

08     try{ return new ActiveXObject('MSXML.XMLHTTP');}catch(e){} 

09     try{ return new ActiveXObject('Microsoft.XMLHTTP');}catch(e){} 

10     try{ return new ActiveXObject('MSXML2.ServerXMLHTTP');}catch(e){} 

11     return null; 

12 }

代碼較少的采用對象特性判斷,

vIEw sourceprint?1 var xhr = window.XMLHttpRequest ? new XMLHttpRequest() : new ActiveXObject('Microsoft.XMLHTTP');

我在這裡采用精簡方式,暫不考慮創建異常的情況。

 

2,發送請求 

vIEw sourceprint?1 xhr.open 

2 xhr.send

 

3,處理響應

vIEw sourceprint?1 xhr.onreadystatechange = function(){ 

2     if(xhr.readyState == 4){ 

3         if(xhr.status == 200){//當然你可以把200~300之間或304的都理解成響應成功 

4             //callback 

5         } 

6     } 

7 }

嗯,到這裡沒什麼特別的,所有的書籍上都是這麼幾個步驟來著。對於初學者來說,要將這幾個步驟很好的封裝一下形成一個良好的模塊還是很困難的。全局變量滿天飛不知道怎麼去組織代碼,初學者開始都是這樣的。現在想想是對一門語言沒有足夠的掌握,尤其是閉包。

這裡采用 單例模式 封裝成一個對象,即只有一個全局的變量將其賦值給AJax,該對象有一個request方法。request有兩個參數,第一個為請求的url(必要的),字符串類型,第二個opt為配置參數(可選的),對象類型。結果處理使用內部私有的_onStateChange函數。

完整代碼如下

vIEw sourceprint?01 /** 

02  * 執行基本AJax請求,返回XMLHttpRequest 

03  * AJax.request(url,{ 

04  *      async   是否異步 true(默認) 

05  *      method  請求方式 POST or GET(默認) 

06  *      data    請求參數 (鍵值對字符串) 

07  *      success 請求成功後響應函數,參數為xhr 

08  *      failure 請求失敗後響應函數,參數為xhr 

09  * }); 

10  * 

11  */

12 AJax =  

13 function(){ 

14     function request(url,opt){ 

15         function fn(){} 

16         var async   = opt.async !== false, 

17             method  = opt.method    || 'GET', 

18             data    = opt.data      || null, 

19             success = opt.success   || fn, 

20             failure = opt.failure   || fn; 

21             method  = method.toUpperCase(); 

22         if(method == 'GET' && data){ 

23             url += (url.indexOf('?') == -1 ? '?' : '&') + data; 

24             data = null; 

25         } 

26         var xhr = window.XMLHttpRequest ? new XMLHttpRequest() : new ActiveXObject('Microsoft.XMLHTTP'); 

27         xhr.onreadystatechange = function(){ 

28             _onStateChange(xhr,success,failure); 

29         }; 

30         xhr.open(method,url,async); 

31         if(method == 'POST'){ 

32             xhr.setRequestHeader('Content-type', 'application/x-www-form-urlencoded;'); 

33         } 

34         xhr.send(data); 

35         return xhr;  

36     } 

37     function _onStateChange(xhr,success,failure){ 

38         if(xhr.readyState == 4){ 

39             var s = xhr.status; 

40             if(s>= 200 && s < 300){ 

41                 success(xhr); 

42             }else{ 

43                 failure(xhr); 

44             } 

45         }else{} 

46     } 

47     return {request:request};    

48 }();

 

如下請求後台的一個servlet,發送參數name=jack,age=20,默認使用異步,GET方式

vIEw sourceprint?01 AJax.request('servlet/ServletJSON',{ 

02         data : 'name=jack&age=20', 

03         success : function(xhr){ 

04             //to do with xhr 

05         }, 

06         failure : function(xhr){ 

07             //to do with xhr 

08         } 

09     } 

10 );

 

以上是一個簡單封裝,用了不到40行的代碼。這裡的請求參數data只能是鍵值字符串,有時候希望可以JS對象,以便可以更靈活的傳參,下一篇將從改善請求參數開始。

-

資料引用:http://www.knowsky.com/552170.Html

XML學習教程| jQuery入門知識| AJAX入門| Dreamweaver教程| Fireworks入門知識| SEO技巧| SEO優化集錦|
Copyright © DIV+CSS佈局教程網 All Rights Reserved