Angular js $http 服务:- header 在 catch 块中不可访问

Angular js $http service:- header is not accessible inside catch block

我尝试了不同的方法来访问 catch 块中的 header,但无法实现。

先试试 :

function removePaymentAccount(currenAccountDetails) {
  var q = $q.defer();
  $http({
      url: UtilityService.createUrl(serverUrl, 'payment', 'removeMethod'),
      method: 'POST',
      data: currenAccountDetails
    }).then(function(response) {
      q.resolve(response);
    })
    .catch(function(err, status, headers) {
      console.log(headers);
      q.reject(err);
    });

  return q.promise;
}

控制台::

undefined

第二次尝试 :

function removePaymentAccount(currenAccountDetails) {
  var q = $q.defer();
  $http({
      url: UtilityService.createUrl(serverUrl, 'payment', 'removeMethod'),
      method: 'POST',
      data: currenAccountDetails
    }).then(function(response) {
      q.resolve(response);
    })
    .catch(function(err) {
      console.log(err.headers('status-msg-header'));
      q.reject(err);
    });

  return q.promise;
}

控制台::

TypeError: err.headers is not a function
at payment.api.js:72
at processQueue (angular.js:14569)
at angular.js:14585
at Scope.parent.$get.Scope.$eval (angular.js:15848)
at Scope.parent.$get.Scope.$digest (angular.js:15659)
at Scope.parent.$get.Scope.$apply (angular.js:15953)
at angular.js:16248
at completeOutstandingRequest (angular.js:5396)
at angular.js:5668

第三次尝试:

function removePaymentAccount(currenAccountDetails) {
  var q = $q.defer();
  $http({
      url: UtilityService.createUrl(serverUrl, 'payment', 'removeMethod'),
      method: 'POST',
      data: currenAccountDetails
    }).then(function(response) {
      q.resolve(response);
    })
    .catch(function(err, status, headers) {
      console.log(headers('status-msg-header'));
      q.reject(err);
    });

  return q.promise;
}

控制台::

same as of second

第四次尝试:

function removePaymentAccount(currenAccountDetails) {
  var q = $q.defer();
  $http({
      url: UtilityService.createUrl(serverUrl, 'payment', 'removeMethod'),
      method: 'POST',
      data: currenAccountDetails
    }).then(function(response) {
      q.resolve(response);
    }, function(response) {
      console.log(response.headers);
      q.reject(response);
    });

  return q.promise;
}

控制台::

undefined

第五次尝试:

function removePaymentAccount(currenAccountDetails) {
  var q = $q.defer();
  $http({
      url: UtilityService.createUrl(serverUrl, 'payment', 'removeMethod'),
      method: 'POST',
      data: currenAccountDetails
    }).then(function(response) {
      q.resolve(response);
    }, function(response, status, headers) {
      console.log(headers);
      q.reject(response);
    });

  return q.promise;
}

控制台:

undefined

我做了很多变体但无法访问(没有列出整个列表)。谁能帮我知道我错过了什么。

.catch 收到响应 object,此 object 将包含 http headers.

demo

app.factory('dataService', function($http, $q){

  return {
    getPayment:function(){

       $http({
      url: 'www.google.com',
      method: 'POST',
      data: [{'name':'me'}]
      }).then(function(response) {
        $q.resolve(response.data);
      })
      .catch(function(response) {
        console.log(response.headers('status-msg-header'));
        console.log(response.status);
        $q.reject(response.statusText);
      });

      return $q.promise;



    }
  }

})

终于找到解决办法了。

function removePaymentAccount(currenAccountDetails) {
  var q = $q.defer();
  $http({
      url: UtilityService.createUrl(serverUrl, 'payment', 'removeMethod'),
      method: 'POST',
      data: currenAccountDetails,
      transformResponse: function(data) {
        try {
          data = JSON.parse(data);
        } catch (e) {}
        return data;
      }
    }).then(function(response) {
      q.resolve(response);
    },function(response) {
      console.log(response.headers('status-msg-header'));
      q.reject(response);
    });

  return q.promise;
}