Angular js $ http服务: - 在catch块

时间:2015-09-30 19:45:17

标签: javascript angularjs http-headers xmlhttprequest

我尝试过不同的方法来访问catch块中的头部但是无法实现这一点。

首先尝试

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;
}

控制台::

  

未定义

第二次尝试

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;
}

console ::

  

TypeError:err.headers不是函数
      在payment.api.js:72
      at processQueue(angular.js:14569)
      at angular.js:14585
      在Scope.parent。$ get.Scope。$ eval(angular.js:15848)
      在Scope.parent。$ get.Scope。$ digest(angular.js:15659)
      在Scope.parent。$ get.Scope。$ apply(angular.js:15953)
      在angular.js:16248
      在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;
}

控制台::

  

与第二次相同

第四次尝试:

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;
}

控制台::

  

未定义

第五次尝试:

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;
}

控制台:

  

未定义

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

2 个答案:

答案 0 :(得分:0)

.catch接收响应对象,此对象将包含http标头。

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;



    }
  }

})

答案 1 :(得分:0)

终于得到了解决方案。

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;
}