我基本上叫get
請求,就像這樣:
var resource = $resource('/api/v1/categories/:id')
resource.get({id: 1}).$promise.then(function(data){
console.log(data)
})
這工作得很好..但我怎麼得到的迴應頭?
我基本上叫get
請求,就像這樣:
var resource = $resource('/api/v1/categories/:id')
resource.get({id: 1}).$promise.then(function(data){
console.log(data)
})
這工作得很好..但我怎麼得到的迴應頭?
您可以使用transformResponse行動defined here這將允許您添加標題
$resource('/', {}, {
get: {
method: 'GET',
transformResponse: function(data, headers){
response = {}
response.data = data;
response.headers = headers();
return response;
}
}
看到這裏JSFiddle
@馬丁的回答工作示例適用於同一域中的請求。所以我想補充他的回答,如果您使用跨域請求,您將不得不添加另一個標頭Access-Control-Expose-Headers: X-Blah, X-Bla
以及Access-Control-Allow-Origin:*
標頭。
其中X-Blah
和X-Bla
是自定義標題。
此外,您不需要使用變換請求來獲取標題。您可以使用此代碼:
var resource = $resource('/api/v1/categories/:id')
resource.get({id: 1}, function(data, headersFun){
console.log(data, headersFun());
})
見this小提琴。 希望這有助於!
我認爲這比目前接受的更方便回答(至少在2016年)。 Angular會自動爲第二個參數提供標題值(不要忘記使用paranthesis,因爲這是一個函數,而不是直接對象)。 – beawolf 2016-04-23 15:03:45
關於跨域和關於頭函數在'then'函數中作爲第二個參數的相關性不那麼重要 - 我幾乎錯過了這個,因爲您的跨域信息! – Sean 2016-06-19 19:03:45
你在這裏和在小提琴中寫的東西之間有一個微妙但非常重要的區別。小提琴使用帶回調的get調用來獲得成功和錯誤,並且在那種情況下headersFun存在。但是,如上所述,通過'$ promise.then'處理響應沒有第二個參數 - 「headersFun」未定義。 – Danny 2017-01-18 15:35:41
老問題,但我認爲值得一提的是未來的參考。 有「官方」角文檔在此解決方案:
值得一提的是,對於GET,查詢等 方法的成功回調在來自服務器以及 爲$響應被傳遞HTTP頭吸氣劑的功能,所以一個可以把上面的例子 ,並獲得訪問HTTP標頭爲:
var User = $resource('/user/:userId', {userId:'@id'});
var users = User.query({}, function(users, responseHeaders){
// ...
console.log(responseHeaders('x-app-pagination-current-page'));
});
(代碼從文檔略微更新的清晰度)
對於CORS請求,需要公開其他答案中提到的標頭。
這個作品,謝謝 – Nathan 2015-02-09 10:13:17
不適用於較新的版本。轉換響應的函數現在應該返回反序列化的數據 – EvAlex 2016-05-17 12:12:05
只需訪問在您的數據之後作爲第二個參數傳遞的'headersGetter'函數。看到下面或這裏的答案:https://docs.angularjs.org/api/ngResource/service/$resource – Sean 2016-06-19 19:05:34