AngularJs在传递给我的控制器之前删除响应头

时间:2016-09-22 09:06:10

标签: javascript angularjs

情况如下:

我向服务器发出了一个帖子请求以创建一个项目,并期望它返回“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。我对违规行进行了评论,并将正确的内容放在其位置上,以备记录

1 个答案:

答案 0 :(得分:1)

尝试

response.headers('Location')

而不是

response.headers['Location']

由于标题是一个函数,而不是一个对象。