2015-03-29 16 views
6

Tôi nhận được lỗi này vì lý do không xác định trong khi cố gắng triển khai mã tải AJAX Spinner.AngularJS Interceptor TypeError: Không thể đọc các tiêu đề 'tài sản' không xác định

Tôi không hiểu vị trí tiêu đề cần được xác định. Tôi đã làm console.log(config) nhưng tôi có thể thấy giá trị headers: accept: text/html ở đó.

Dưới đây là Mã của tôi:

/** 
* Spinner Service 
*/ 

//Spinner Constants 
diary.constant('START_REQUEST','START_REQUEST'); 
diary.constant('END_REQUEST','END_REQUEST'); 

//Register the interceptor service 
diary.factory('ajaxInterceptor', ['$injector','START_REQUEST', 'END_REQUEST', function ($injector, START_REQUEST, END_REQUEST) { 
    var $http, 
    $rootScope, 
    myAjaxInterceptor = { 
     request: function (config) { 
      $http = $http || $injector.get('$http'); 
      if ($http.pendingRequests.length < 1) { 
       console.log(config); 
       $rootScope = $rootScope || $injector.get('$rootScope'); 
       $rootScope.$broadcast(START_REQUEST); 
      } 
     } 
    }; 

    return myAjaxInterceptor; 
}]); 

diary.config(['$httpProvider', function ($httpProvider) { 
    $httpProvider.interceptors.push('ajaxInterceptor'); 
}]); 
+0

vào những gì dòng bạn nhận được lỗi này? – Grundy

+0

Không có số dòng được hiển thị theo góc ::: ====== Loại lỗi: Không thể đọc tiêu đề của thuộc tính 'không xác định tại $ get.serverRequest (angular.js: 9366) tại processQueue (angular.js: 13248) tại angular.js: 13264 tại Phạm vi. $ Get.Scope. $ Eval (angular.js: 14466) tại Phạm vi. $ Get.Scope. $ Digest (angular.js: 14282) tại Phạm vi. $ get.Scope. $ apply (angular.js: 14571) lúc bootstrapApply (angular.js: 1455) tại Object.invoke (angular.js: 4203) tại doBootstrap (angular.js: 1453) lúc bootstrap (góc cạnh) .js: 1473) – ChanX

Trả lời

0

Ở đây bạn có một mẫu đầy đủ về cách triển khai một spinner sử dụng tên lửa đánh chặn (gói $ rootScope trong một dịch vụ cho mã readibility tốt hơn).

http://lemoncode.net/2013/07/31/angularjs-found-great-solution-to-display-ajax-spinner-loading-widget/

Như bạn chỉ ra, điều này bị phản đối (tôi phải cập nhật các bưu điện), cơ cấu hiện tại tôi đang sử dụng (giản thể đang bên trong). Tôi nghĩ là tốt nhất có thể bắt đầu từ một plunker, có lẽ nó không có gì để làm với cách tou đang thực hiện (hãy để tôi tìm kiếm một plunkr hạt)

myapp.factory('httpInterceptor', ['$q', '$injector', 
    function ($q, $injector) { 

    return { 
     'request': function(config) { 
     // request your $rootscope messaging should be here? 
     return config; 
     }, 

    'requestError': function(rejection) { 
     // request error your $rootscope messagin should be here? 
     return $q.reject(rejection); 
     }, 


     'response': function(response) { 
     // response your $rootscope messagin should be here? 

     return response; 
     }, 

    'responseError': function(rejection) { 
     // response error your $rootscope messagin should be here? 

     return $q.reject(rejection); 

     } 
    }; 
    } 
]); 
+0

hướng dẫn được tham chiếu bên trong bài đăng trên blog đã lỗi thời .. Trên thực tế tôi đã theo dõi bài đăng lúc đầu nhưng sau đó tôi phát hiện ra rằng $ httpProviders.responseInterceptors không được chấp nhận .. Tôi đang sử dụng góc 1.3.15 – ChanX

+0

Mmm ... xin lỗi về điều đó, kiểm tra mã tôi có trong các dự án cập nhật hơn Tôi đang sử dụng $ httpProvider.interceptors. đẩy ('httpInterceptor') ;, và phương thức này có yêu cầu "phương thức" công khai ", 'requestError' và 'reponseError', bạn có muốn tôi dán dịch vụ đó không? – Braulio

+0

Tôi đã thử phương pháp đó .. Thực tế phương pháp trên của tôi dựa trên đó .. Nhưng tiêu đề thuộc tính của lỗi không xác định .. Dù sao thì cũng có thể dán dịch vụ đó .. – ChanX

12

Tôi nghĩ rằng tôi có giải pháp.

Tôi đã có cùng một vấn đề dưới một dự án AngularJS hợp đánh chặn được một cách chính xác được xác định giống như bạn (https://docs.angularjs.org/api/ng/service/$http#interceptors)

Để rút ngắn, một đánh chặn bắt các cấu hình và phải trả lại nó. Và bạn quên.

Vì vậy, đó sẽ là:

request: function (config) { 
    $http = $http || $injector.get('$http'); 
    if ($http.pendingRequests.length < 1) { 
     $rootScope = $rootScope || $injector.get('$rootScope'); 
     $rootScope.$broadcast(START_REQUEST); 
    } 
    return config; 
} 
Các vấn đề liên quan