1. 程式人生 > >angularjs中的$http詳解

angularjs中的$http詳解

angularjs .... -type 回調 文檔 undefined fig post 常用

  1. 語法:
  2. 要將區別先弄清$http服務,它是對原生XMLHttpRequest對象的簡單封裝,是只能接受一個參數的方法,
  3. 這個方法會返回一個promise對象,具有sccess和error兩個方法。當然,我們也可以在響應返回時用then
  4. 方法來處理,會得到一個特殊的參數,代表了對象的成功或失敗信息,或者可以使用success和error回調
  5. 代替。
  6. $http(
  7. ).then(function success(resp){
  8. //響應成功時調用,resp是一個響應對象
  9. },function error(resp){
  10. // 響應失敗時調用,resp帶有錯誤信息
  11. }
  12. );
  13. 可以使用then()函數來處理$http服務的回調
  14. then()函數接收的resp(響應對象)包含5個屬性: 
  15. 1. data(字符串或對象):響應體,就是後臺返回的數據
  16. 2. status:相應http的狀態碼,如200
  17. 3. headers(函數):頭信息的getter函數,可以接受一個參數,用來獲取對應名字的值
  18. 4. config(對象):生成原始請求的完整設置對象
  19. 5. statusText:相應的http狀態文本,如"ok"
  20. $http({
  21. url:url, //請求的url路徑
  22. method:method, //GET/DELETE/HEAD/JSONP/POST/PUT
  23. params:params , //轉為 ?param1=xx1?m2=xx2的形式
  24. data: data //包含了將被當做消息體發送給服務器的數據,通常在POST請求時使用
  25. }
  26. }).success(function(response, status, header, config, statusText){
  27. //成功處理
  28. }).error(function(data,header,config,status){
  29. //錯誤處理
  30. });
  31. then寫法與success參數是等價的,then方法和success方法的主要區別就是,then方法會接受到完整的響應對象,而
  32. success則會對響應對象進行析構。
  33. AngularJS中的簡單請求 --- $http --- 一個類似jquery的$.ajax的對象,用於異步請求
  34. 語法:
  35. $http服務的設置對象:
  36. 當我們把$http當成函數來使用時即$http(),需要傳入一個對象,這個對象可以包含以下鍵
  37. 1、method 字符串 表示發送的請求類型 get post jsonp等等
  38. 2、url 字符串 絕對或者相對的URL,請求的目標
  39. 3、params 字符串或對象 會被轉化成查詢字符串加到URL後面,如果不是字符串會被JSON序列化
  40. 4、data 字符串或者對象 這個對象包含了被當做消息體發送給服務器的數據,一般在POST請求中使用,並且從angular1.3開始可以在POST請求裏發送二進制數據
  41. var blob = new Blob({name:’張三’}); $http({method:’get’,url:’/‘,data:blob});
  42. 5、headers 對象 在我們做POST跨域和後臺配合的時候就用到了headers,其代表隨請求發送的HTTP頭字符串
  43. 6、xsrfHeaderName 字符串 保存XSFR令牌的HTTP頭的名稱
  44. 7、xsrfCookieName 字符串 保存XSFR令牌的cookie的名稱
  45. 8、transformRequest 函數或函數組 用來對HTTP請求頭和體信息進行轉換,並返回轉化後的版本,通常用於在請求發送給服務器之前對其序列化
  46. 9、transformResponse 函數或函數組 用來HTTP響應頭和響應體信息進行轉換,並返回轉化後的版本,通常用來反序列化
  47. 10、cache 布爾或緩存對象 如果設置為true angularjs會用默認的$http緩存對GET請求進行緩存
  48. 11、timout 數值或者promise對象,如果為數值那麽請求會在指定的毫秒後結束(會跳到失敗的error方法裏) ,如果為對象那麽promise對象在被resolve時請求會被中止,方法執行完畢再執行請求
  49. 12、responseType 字符串 該選項會在請求中設置XMLHttpResponseType屬性有以下類型: “”字符串默認,”arraybuffer”(arraybuffer),”blob”(blob對象),“document”(HTTP文檔),”json“(從JSON對象解析出來的json字符串),”text“(字符串),”moz-blob“(Firefox的接收進度事件),”moz-chunked-text“(文本流),”moz-chunked-arraybuffer”(arraybuffer流)
  50. $http服務的快捷方法
  51. $http提供了一些快捷方法讓我們使用,一共有六個(其實是六種請求模式)
  52. 1、$http.get(url字符串,config可選的配置-對象類型) 返回HttpPromise對象
  53. 2、$http.delete(url字符串,config可選的配置-對象類型) 返回HttpPromise對象
  54. 3、$http.head(url字符串,config可選的配置-對象類型) 返回HttpPromise對象
  55. 4、$http.jsonp(url字符串,config可選的配置-對象類型) 返回HttpPromise對象
  56. 5、$http.post(url字符串,data對象或字符串,config可選的配置-對象類型) 返回HttpPromise對象
  57. 6、$http.put(url字符串,data對象或字符串,config可選的配置-對象類型) 返回HttpPromise對象
  58. $http({
  59. url:url, //請求的url路徑
  60. method:method, //GET/DELETE/HEAD/JSONP/POST/PUT
  61. params:params , //轉為 ?param1=xx1?m2=xx2的形式
  62. data: data //包含了將被當做消息體發送給服務器的數據,通常在POST請求時使用
  63. }
  64. }).success(function(response, status, header, config, statusText){
  65. //成功處理
  66. }).error(function(data,header,config,status){
  67. //錯誤處理
  68. });
  69. 特別註意:
  70. 1.請求參數說明:
  71. url:url, //請求的url路徑
  72. method:method, //GET/DELETE/HEAD/JSONP/POST/PUT
  73. params:params , //轉為 ?param1=xx1?m2=xx2的形式
  74. data: data //包含了將被當做消息體發送給服務器的數據,通常在POST請求時使用
  75. 2.響應參數說明:
  76. response --- 響應體,即:要請求的數據
  77. status --- HTTP狀態碼
  78. header --- 頭信息
  79. config --- 用來生成原始請求的完整設置對象
  80. statusText --- 相應的HTTP狀態文本
  81. 3.緩存HTTP請求
  82. 默認情況下,$http服務不會對請求進行本地緩存。在發送單獨請求時,可通過向$http請求傳遞一個布爾參數來啟用緩存
  83. eg:
  84. $http.get({‘/api/users.json‘,{cache:true}})
  85. .success(function(data){ })
  86. .error(function(data){ })
  87. 解析:
  88. 第一次發送請求時,$http服務會向 /api/users.json發送一個GET請求,
  89. 第二次發送同一個GET請求時,$http服務會從緩存中取回請求的結果,而不會真的發送一個HTTP GET請求
  90. 設置啟動緩存後,AngularJS默認會使用 $cacheFactory,這個服務在AngularJS啟動時自動創建
  91. 如果想要對AngularJS使用的緩存進行更多的自定義控制,可以向請求傳入一個自定義的緩存實例代替true。
  92. 1.GET方式 --- params參數會轉為 ?param1=xx1?m2=xx2的形式
  93. 1.$http請求:
  94. $http({
  95. url:"/api/users.json",
  96. method:‘GET‘,
  97. params:{
  98. ‘username‘:‘jay‘
  99. }
  100. }
  101. }).success(function (response, status, headers, config) {
  102. /*response -- 成功返回的數據
  103. status -- 狀態碼
  104. headers -- 頭信息
  105. config -- 其他信息
  106. */
  107. }).error(function (response) {
  108. }
  109. });
  110. 2.快捷請求:
  111. $http.get(url, [config])
  112. .success(function(data){})
  113. .error(function(data){});
  114. 2.POST方式
  115. $http({method : ‘POST‘,params : { id:123}, data:{name:‘john‘,age:27}, url : "/mypath"})
  116. .success(function(response, status, headers, config){
  117. //do anything what you want;
  118. })
  119. .error(function(response, status, headers, config){
  120. //do anything what you want;
  121. });
  122. 2.快捷方式:
  123. $http.post(url, $scope.formData).success(function (response, status, headers, config) {
  124. ......
  125. }).error(function (response) {
  126. ......
  127. });
  128. 3.$http提交表單 --- 與Spring MVC交互, 使用這種方式
  129. 通用方式:
  130. $http({
  131. method: "POST",
  132. url: url,
  133. headers: {‘Content-Type‘: ‘application/x-www-form-urlencoded‘},
  134. data: $.param($scope.formData)
  135. }).success(function(result){
  136. }).error(function(result){
  137. });
  138. 快捷方式:
  139. $http.post(url, $scope.formData)
  140. .success(function(result){
  141. })
  142. .error(function(result){
  143. });
  144. eg:
  145. var data = {
  146. "server":$scope.server,
  147. "time":$("#time").val(),
  148. "day":day
  149. }
  150. $http({
  151. method: "post",
  152. url: ctx+‘/player/lossPlayer/list.htm‘,
  153. headers: {‘Content-Type‘: ‘application/x-www-form-urlencoded‘},
  154. data: $.param(data)
  155. }).success(function(result){
  156. if(result.tip!=undefined){
  157. //當前綁定的數據清空
  158. $scope.players = [];
  159. alert(result.tip);
  160. }else{
  161. console.log(result.json);
  162. $scope.players = $.parseJSON($.parseJSON(result.json).players);
  163. }
  164. });
  165. 4.使用$http指定的方法發送HTTP請求:
  166. get(url, [config]);
  167. delete(url, [config]);
  168. post(url, data, [config]);
  169. put(url, data, [config]);
  170. 5.發送jsonp請求:
  171. 為了發送JSONP請求,url中必須包含JSON_CALLBACK參數, jsonp(url,config) 其中config是可選的
  172. eg:
  173. var promise=$http.jsonp("/api/users.json?callback=JSON_CALLBACK");

angularjs中的$http詳解