情况如下:
我向服务器发出了一个帖子请求以创建一个项目,并期望它返回“201 Created”,其中包含位置标题中的新项目位置,在那里我得到它以发出第二个请求并获取完整项目数据。
这些是服务器发送的响应标头:
Status Code: 201 Created
Connection: keep-alive
Content-Length: 17
Content-Type: application/json
Date: Thu, 22 Sep 2016 08:52:20 GMT
Location: /tasks/4
access-control-allow-headers: Content-type, Cache-Control, Keep-Alive, Location
access-control-allow-methods: GET, POST, PUT, DEL, OPTIONS
access-control-allow-origin: *
access-control-expose-headers: Content-type, Cache-Control, Keep-Alive, Location
然后,当我尝试从我的控制器获取Location标头时,我得到:
// console.log(response.headers)
[content-type,] { content-type="application/json; charset=utf-8"}
在我的firefox控制台中,如果我尝试这样做会抛出错误:
response.headers['Location']
注意:我正在使用Angular 1.5.8和推荐的“Promise”变体for $ https
以下是我的控制器代码的摘录:
app.controller('NewTaskCtrl', function($scope, $http){
$scope.taskName = null
$scope.createTask = function(){
var data=JSON.stringify( { Name: $scope.taskName} )
$http.post('http://192.168.1.129:9999/api/tasks',data)
.then(
function(response){
// error Here => console.log('Received Headers', response.headers)
console.log('Received Headers', response.headers())
// Error here => $http.get('http://192.168.1.129:9999'+response.headers['Location'])
$http.get('http://192.168.1.129:9999'+response.headers('Location'))
.then (
function(response){
$scope.Tasks.push(response)
},
function(reason){
alert("Unexpected Error Ocurred:\n"+JSON.stringify(reason))
}
)
},
function(reason){
alert("Unexpected Error Ocurred:\n"+JSON.stringify(reason))
}
)
}
})
我知道为什么我会丢失标题以及如何获取标题?
EDIT。我对违规行进行了评论,并将正确的内容放在其位置上,以备记录
答案 0 :(得分:1)
尝试
response.headers('Location')
而不是
response.headers['Location']
由于标题是一个函数,而不是一个对象。