$http服務
$http(requestConfig)只是一個封裝的XMLHttpRequest對象刘绣。
requestConfig 是一個對象粹胯,為發(fā)送請求的參數(shù)棠笑。
返回一個Promise對象
$http({ method: 'GET', url: '/someUrl' }).then(function successCallback(response) { // 請求成功執(zhí)行代碼 }, function errorCallback(response) { // 請求失敗執(zhí)行代碼 });
promise返回時销部,可以鏈式調用缴饭。還可以實用then方法處理回調硫椰。
如果響應狀態(tài)碼在200和299之間繁调,會認為響應是成功的, success回調會被調用靶草,否則error
回調會被調用涉馁。調用HttpPromise對象上的then()、 success()和error()方法爱致。 then()方法與其
他兩種方法的主要區(qū)別是烤送,它會接收到完整的響應對象,而success()和error()則會對響應對象進行析構糠悯。-
快捷方法
- $http.get
- $http.get
- $http.head
- $http.post
- $http.put
- $http.delete
- $http.jsonp
- $http.patch
-
響應對象
- AngularJS傳遞給then()方法的響應對象包含四個屬性帮坚。
? data(字符串或對象)
這個數(shù)據(jù)代表轉換過后的響應體(如果定義了轉換的話)。
? status(數(shù)值型)
響應的HTTP狀態(tài)碼互艾。
? headers(函數(shù))
這個函數(shù)是頭信息的getter函數(shù)试和,可以接受一個參數(shù),用來獲取對應名字的值纫普。例如阅悍,用如
下代碼獲取X-Auth-ID的值:method: 'GET', url: '/api/users.json' }).then (resp) { // 讀取X-Auth-ID resp.headers('X-Auth-ID'); }); ? config(對象) 這個對象是用來生成原始請求的完整設置對象。 ? statusText(字符串) 這個字符串是響應的HTTP狀態(tài)文本昨稼。
- AngularJS傳遞給then()方法的響應對象包含四個屬性帮坚。
-
緩存$http請求
默認情況下节视, $http服務不會對請求進行本地緩存。在發(fā)送單獨的請求時假栓,我們可以通過向
$http請求傳入一個布爾值或者一個緩存實例來啟用緩存寻行。.success(function(data) {}) .error(function(data) {}); 第一次發(fā)送請求時, $http服務會向/api/users.json發(fā)送一個GET請求匾荆。第二次發(fā)送同一個GET 請求時拌蜘, $http服務會從緩存中取回請求的結果,而不會真的發(fā)送一個HTTP GET請求牙丽。 在這個例子里简卧,由于設置了啟用緩存, AngularJS默認會使用$cacheFactory,這個服務是 AngularJS在啟動時自動創(chuàng)建的烤芦。 例如举娩,如果要使用LRU(Least Recenlty Used,最近最少使用)緩存,可以像下面這樣傳入 緩存實例對象: var lru = $cacheFactory('lru',{capacity: 20 }); // $http請求 $http.get('/api/users.json', { cache: lru }) .success(function(data){}) .error(function(data){});
每次發(fā)送請求時都傳入一個自定義緩存是很麻煩的事情(即使是在服務中)晓铆∩琢迹可以通過應用
的.config()函數(shù)給所有$http請求設置一個默認的緩存:
angular.module('myApp', [])
.config(function($httpProvider, $cacheFactory) {
$httpProvider.defaults.cache = $cacheFactory('lru', {
capacity: 20
});
});
現(xiàn)在,所有的請求都會使用我們自定義的LRU緩存了骄噪。