2015-09-30 3 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; 
} 

Console ::

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; 



    } 
    } 

}) 
Смежные вопросы