$http服務
$http(requestConfig)只是一個封裝的XMLHttpRequest對象。
requestConfig 是一個對象,為發送請求的參數。
返回一個Promise對象
$http({ method: 'GET', url: '/someUrl' }).then(function successCallback(response) { // 請求成功執行代碼 }, function errorCallback(response) { // 請求失敗執行代碼 });
promise返回時,可以鏈式調用。還可以實用then方法處理回調。
如果響應狀態碼在200和299之間,會認為響應是成功的, success回調會被調用,否則error
回調會被調用。調用HttpPromise對象上的then()、 success()和error()方法。 then()方法與其
他兩種方法的主要區別是,它會接收到完整的響應對象,而success()和error()則會對響應對象進行析構。-
快捷方法
- $http.get
- $http.get
- $http.head
- $http.post
- $http.put
- $http.delete
- $http.jsonp
- $http.patch
-
響應對象
- AngularJS傳遞給then()方法的響應對象包含四個屬性。
? data(字符串或對象)
這個數據代表轉換過后的響應體(如果定義了轉換的話)。
? status(數值型)
響應的HTTP狀態碼。
? headers(函數)
這個函數是頭信息的getter函數,可以接受一個參數,用來獲取對應名字的值。例如,用如
下代碼獲取X-Auth-ID的值:method: 'GET', url: '/api/users.json' }).then (resp) { // 讀取X-Auth-ID resp.headers('X-Auth-ID'); }); ? config(對象) 這個對象是用來生成原始請求的完整設置對象。 ? statusText(字符串) 這個字符串是響應的HTTP狀態文本。
- AngularJS傳遞給then()方法的響應對象包含四個屬性。
-
緩存$http請求
默認情況下, $http服務不會對請求進行本地緩存。在發送單獨的請求時,我們可以通過向
$http請求傳入一個布爾值或者一個緩存實例來啟用緩存。.success(function(data) {}) .error(function(data) {}); 第一次發送請求時, $http服務會向/api/users.json發送一個GET請求。第二次發送同一個GET 請求時, $http服務會從緩存中取回請求的結果,而不會真的發送一個HTTP GET請求。 在這個例子里,由于設置了啟用緩存, AngularJS默認會使用$cacheFactory,這個服務是 AngularJS在啟動時自動創建的。 例如,如果要使用LRU(Least Recenlty Used,最近最少使用)緩存,可以像下面這樣傳入 緩存實例對象: var lru = $cacheFactory('lru',{capacity: 20 }); // $http請求 $http.get('/api/users.json', { cache: lru }) .success(function(data){}) .error(function(data){});
每次發送請求時都傳入一個自定義緩存是很麻煩的事情(即使是在服務中)。可以通過應用
的.config()函數給所有$http請求設置一個默認的緩存:
angular.module('myApp', [])
.config(function($httpProvider, $cacheFactory) {
$httpProvider.defaults.cache = $cacheFactory('lru', {
capacity: 20
});
});
現在,所有的請求都會使用我們自定義的LRU緩存了。