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

基本的封裝Ajax之一

開發 后端
AJAX并非縮寫詞,是一種創建交互式網頁應用的網頁開發技術。本文主要介紹的是創建一個基本的Ajax的步驟,讓我們一起來看。

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

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

1,創建Ajax的核心對象XMLHttpRequest

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

  1. function cretaeXHR(){   
  2. tryreturn new XMLHttpRequest();}catch(e){}   
  3. tryreturn new ActiveXObject('Msxml2.XMLHTTP.6.0');}catch(e){}   
  4. tryreturn new ActiveXObject('Msxml2.XMLHTTP.4.0');}catch(e){}   
  5. tryreturn new ActiveXObject('Msxml2.XMLHTTP.3.0');}catch(e){}   
  6. tryreturn new ActiveXObject('Msxml2.XMLHTTP');}catch(e){}   
  7. tryreturn new ActiveXObject('MSXML3.XMLHTTP');}catch(e){}   
  8. tryreturn new ActiveXObject('MSXML.XMLHTTP');}catch(e){}   
  9. tryreturn new ActiveXObject('Microsoft.XMLHTTP');}catch(e){}   
  10. tryreturn new ActiveXObject('MSXML2.ServerXMLHTTP');}catch(e){}   
  11. return null;   
  12. }  

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

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

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

2,發送請求

  1. xhr.open   
  2. xhr.send  

3,處理響應

  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函數。

完整代碼如下:

  1. /**   
  2. * 執行基本ajax請求,返回XMLHttpRequest   
  3. * Ajax.request(url,{   
  4. * async 是否異步 true(默認)   
  5. * method 請求方式 POST or GET(默認)   
  6. * data 請求參數 (鍵值對字符串)   
  7. * success 請求成功后響應函數,參數為xhr   
  8. * failure 請求失敗后響應函數,參數為xhr   
  9. * });    
  10. */   
  11. Ajax =   
  12. function(){   
  13. function request(url,opt){   
  14. function fn(){}   
  15. var async = opt.async !== false,   
  16. method = opt.method || 'GET',   
  17. data = opt.data || null,   
  18. success = opt.success || fn,   
  19. failure = opt.failure || fn;   
  20. method = method.toUpperCase();   
  21. if(method == 'GET' && data){   
  22. url += (url.indexOf('?') == -1 ? '?' : '&') + data;   
  23. data = null;   
  24. }   
  25. var xhr = window.XMLHttpRequest ? new XMLHttpRequest() : new ActiveXObject('Microsoft.XMLHTTP');   
  26. xhr.onreadystatechange = function(){   
  27. _onStateChange(xhr,success,failure);   
  28. };   
  29. xhr.open(method,url,async);   
  30. if(method == 'POST'){   
  31. xhr.setRequestHeader('Content-type''application/x-www-form-urlencoded;');   
  32. }   
  33. xhr.send(data);   
  34. return xhr;   
  35. }   
  36. function _onStateChange(xhr,success,failure){   
  37. if(xhr.readyState == 4){   
  38. var s = xhr.status;   
  39. if(s>= 200 && s < 300){   
  40. success(xhr);   
  41. }else{   
  42. failure(xhr);   
  43. }   
  44. }else{}   
  45. }   
  46. return {request:request};   
  47. }();  

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

  1. Ajax.request('servlet/ServletJSON',{    
  2.          data : 'name=jack&age=20',    
  3.         success : function(xhr){    
  4.              //to do with xhr    
  5.         },    
  6.          failure : function(xhr){    
  7.              //to do with xhr    
  8. }    
  9. }    
  10. );   

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

【編輯推薦】

  1. 使用 jQuery 簡化 Ajax 開發
  2. 外國設計大師Ajax之父74張圖詳談用戶體驗的要素
  3. 在AJAX開發中集成數據庫技術
  4. Ajax和WEB服務數據格式:自定義返回格式
責任編輯:于鐵 來源: 博客園
相關推薦

2012-03-15 16:12:57

JavaHashMap

2021-07-06 06:12:43

Shell語法變量

2021-10-30 18:38:49

Java c++反射

2011-08-03 09:37:55

云計算

2011-04-11 15:53:40

C++

2021-02-04 15:08:37

Vue漸進式框架

2011-06-16 13:45:14

2009-01-13 14:37:17

WinForm視頻教程MVP

2021-12-15 08:26:03

TCASwiftUIUIKit

2023-11-30 07:45:11

useEffectReact

2021-06-03 19:55:55

MySQ查詢優化

2012-08-28 09:21:59

Ajax查錯經歷Web

2010-06-04 17:43:20

MySQL綠色安裝

2022-03-15 15:24:53

操作系統RTOSAT模塊

2017-03-27 21:59:57

TDD開發編程

2023-03-31 11:21:10

網絡協議LoRaWAN

2021-08-30 09:30:29

Kafka高性能設計

2022-01-13 14:01:39

Rfid克隆防護

2025-05-07 00:25:00

芯片焊料PC

2021-05-06 05:39:30

Inotify監聽系統
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 天天爽夜夜骑 | 欧美久久久久久 | 免费av观看 | 欧美一区永久视频免费观看 | 精品在线99 | 精品一区二区不卡 | 国产欧美精品一区二区色综合朱莉 | 日韩欧美在线一区 | 亚洲精品视频在线观看视频 | 亚洲天堂av在线 | 午夜视频免费 | 成年人黄色免费视频 | 黄色日本视频 | 日韩中文字幕 | 中文天堂在线观看 | 国产精品99久久久久久www | 欧美精品成人 | 羞羞视频在线观免费观看 | 久久久久国产精品一区二区 | 成人在线亚洲 | 九九色综合 | 成人在线观看免费 | 91精品一区二区三区久久久久久 | 欧美一区二区久久 | 国产精品一区二区免费 | 欧美日韩黄色一级片 | 久久av一区二区 | www日韩欧美 | 99亚洲精品 | 美女张开腿露出尿口 | gogo肉体亚洲高清在线视 | 亚洲一本 | 亚洲欧美中文字幕在线观看 | 久久宗合色 | 99久久精品免费视频 | 狠狠婷婷综合久久久久久妖精 | 宅女噜噜66国产精品观看免费 | 在线观看视频亚洲 | 久久天天综合 | 中文字幕在线观看一区二区 | 黑人巨大精品欧美一区二区免费 |