2015-09-30 21 views
3

我尝试了不同的方法来访问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; 
} 

控制台:

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

我做很多变化,但无法访问(不张贴整个列表)。任何人都可以请帮我知道我错过了什么。

+0

你试过'finally'而不是'catch'吗? – pherris

+0

不确定.catch承诺回调获取与您可以提供给'.then'的错误回调相同的参数。尝试使用错误回调代替.catch承诺(即'.then(function(){success stuff},function(response){error stuff here)'),检查[$ http](https:// docs.angularjs.org/api/ng/service/$http)doc的实际使用语法 –

+0

让我试试看。 –

回答

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



    } 
    } 

})