2013-10-18 27 views
13

Próbuję uzyskać dostęp do nagłówków HTTP w moim sterowniku kątowym, ale jestem niezdefiniowany. Ponadto widzę odpowiedź nagłówka w mojej usłudze kątowej, która nie odzwierciedla w moim kontrolerze. Czy ktoś może mi powiedzieć, czego mi brakuje? Proszę patrz poniższy kod:AngularJS - dostęp do nagłówków HTTP

Usługa:

cmApp.service('supplierService', function ($http, $q) { 
    this.getSuppliers = function (orderByColumn, skipRows, takeRows) { 
     var deferred = $q.defer(); 
     $http({ 
      method: 'GET', 
      url: 'api/supplier', 
      params: { orderBy: orderByColumn, skip: skipRows, take: takeRows }, 
      timeout: 30000, 
      cache: false 
     }). 
     success(function (data, status, headers, config) { 
      // any required additional processing here    
      deferred.resolve(data, status, headers, config);    
     }). 
     error(function (data, status) { 
      deferred.reject(data, status, headers, config); 
     }); 
     return deferred.promise;   
    } 

Kontroler:

supplierService.getSuppliers($scope.orderby, $scope.skip, $scope.take) 
     .then(function (data, status, headers, config) { 
      **//getting undefined here.** 
      $scope.totalRecords = parseInt(headers('X-TotalRowCount'));     
      $scope.suppliers = data; 
     }, function (error) { 
      // error handling here 
     }); 
+1

Proszę spojrzeć na $ httpProvider. Użyj tego, aby kontrolować swój nagłówek. – kroonwijk

Odpowiedz

18

Znalazłem rozwiązanie mojego autorstwa. Wszystko, co muszę zrobić, to utworzyć tablicę i dodać wszystkie te wartości do tego samego & zwrócić ją do kontrolera. Proszę zapoznać się z uaktualnioną poniższy kod:

Usługa:

cmApp.service('supplierService', function ($http, $q) { 
    this.getSuppliers = function (orderByColumn, skipRows, takeRows) { 
     var deferred = $q.defer(); 
     $http({ 
      method: 'GET', 
      url: 'api/supplier', 
      params: { orderBy: orderByColumn, skip: skipRows, take: takeRows }, 
      timeout: 30000, 
      cache: false 
     }). 
     success(function (data, status, headers, config) { 
      // any required additional processing here 
      var results = []; 
      results.data = data; 
      results.headers = headers(); 
      results.status = status; 
      results.config = config; 

      deferred.resolve(results);    
     }). 
     error(function (data, status) { 
      deferred.reject(data, status, headers, config); 
     }); 
     return deferred.promise;   
    } 

Kontroler:

supplierService.getSuppliers($scope.orderby, $scope.skip, $scope.take) 
      .then(function (response) {     
       $scope.suppliers = response.data; 
       $scope.totalRecords = parseInt(response.headers["x-totalrowcount"]);     
      }, function (error) { 
       // error handling here 
      }); 
+0

Działa dobrze, dzięki za informacje –

+0

dziękuję bardzo człowieku. bardzo pomogło. – victorkurauchi

+0

W kontrolerze, powinno być takie: $ scope.totalRecords = parseInt (response.headers ("x-totalrowcount")); ta praca dla mnie w leasingu. –

6

To pytanie jest stary, ale $ http() zwraca samej obietnicy. możesz po prostu zwrócić to ze swojej usługi, bez potrzeby tworzenia nowej obietnicy. Możesz to zrobić nawet po użyciu .success() i .error(), lub w tym przypadku nawet po użyciu .then(), kontynuują łańcuch.

2

Niestandardowe nagłówki będą widoczne w tej samej domenie. Jednak w przypadku sytuacji crossdomain serwer musi wysyłać nagłówki Access-Control-Expose: X-Foo, z właściwością międzydomenową jako nagłówkiem * ..., aby uczynić niestandardowe nagłówki widocznymi.

1

miałem dostęp do Reklamowe i TokenExpiry razem z odpowiedzinagłówki mojego usługi REST, a następnie zapisać go w moim $ rootScope. Oto kod, którego użyłem:

   $scope.Authenticate=function(){ 
        var EncDecUserPass=decodeURIComponent(encodeURIComponent($scope.LoggedUserName+':'+$scope.LoggedUserPassword)) ; 
        $http(
        {method: 'GET', 
        url: 'http://localhost:53256/api/Products/Authenticate', 
        cache: false, 
        headers:{'Authorization':'Basic '+window.btoa(EncDecUserPass)} 
        } 
        ).success(function(data, status, headers, config) { 
         //Here it goes 
         $rootScope.token=headers().token; 
         $rootScope.tokenExpirySec=headers().tokenexpiry; 
        }).error(function(data, status, headers, config) { 
        alert('Invalid User'); 
        }); 
       } 
+0

ładne podejście !! –

Powiązane problemy