2015-02-09 18 views
16

tôi về cơ bản gọi get yêu cầu như vậy:

var resource = $resource('/api/v1/categories/:id') 

resource.get({id: 1}).$promise.then(function(data){ 
    console.log(data) 
}) 

này hoạt động tốt .. nhưng làm thế nào để tôi có được tiêu đề phản ứng?

Trả lời

37

Bạn có thể sử dụng các hành động transformResponse defined here này sẽ cho phép bạn thêm các tiêu đề

$resource('/', {}, { 
    get: { 
     method: 'GET', 
     transformResponse: function(data, headers){ 
      response = {} 
      response.data = data; 
      response.headers = headers(); 
      return response; 
     } 
    } 

Xem một ví dụ làm việc ở đây JSFiddle

+1

Tác phẩm này, cảm ơn bạn – Nathan

+0

không hoạt động với các phiên bản mới hơn. Chức năng chuyển đổi phản hồi sẽ trả lại dữ liệu được deserialized ngay bây giờ – EvAlex

+0

Chỉ cần truy cập chức năng 'headersGetter' được chuyển thành tham số thứ hai sau dữ liệu của bạn. Xem câu trả lời dưới đây hoặc tại đây: https://docs.angularjs.org/api/ngResource/service/$resource – Sean

15

@ Martin câu trả lời làm việc cho các yêu cầu cùng một tên miền. Vì vậy, tôi muốn thêm vào câu trả lời của mình rằng nếu bạn đang sử dụng các yêu cầu miền chéo, bạn sẽ phải thêm một tiêu đề khác với Access-Control-Expose-Headers: X-Blah, X-Bla cùng với tiêu đề Access-Control-Allow-Origin:*.

trong đó X-BlahX-Bla là tiêu đề tùy chỉnh.

Ngoài ra, bạn không cần sử dụng yêu cầu chuyển đổi để nhận tiêu đề. Bạn có thể sử dụng mã này:

var resource = $resource('/api/v1/categories/:id') 

resource.get({id: 1}, function(data, headersFun){ 
    console.log(data, headersFun()); 
}) 

Xem this fiddle. Hy vọng điều này sẽ giúp !!!

+0

Tôi nghĩ điều này thuận tiện hơn so với hiện tại được chấp nhận trả lời (Ít nhất là trong năm 2016). Góc tự động cung cấp cho bạn các giá trị tiêu đề với tham số thứ 2 (Đừng quên sử dụng dấu ngoặc đơn vì đây là một hàm, không phải là một đối tượng trực tiếp). – beawolf

+0

Ít quan trọng về tên miền chéo và có liên quan hơn về chức năng của tiêu đề là tham số thứ hai trong hàm 'then' - tôi gần như đã bỏ lỡ điều này vì thông tin tên miền chéo của bạn! – Sean

+2

Có một sự khác biệt tinh tế nhưng cực kỳ quan trọng giữa những gì bạn đã viết ở đây và trong câu chuyện. Fiddle đang sử dụng lệnh gọi 'get' với các cuộc gọi lại để thành công và lỗi, và trong trường hợp đó các headersFun tồn tại. Nhưng việc xử lý phản hồi qua '$ promise.then' như bạn đã viết ở trên không có tham số thứ hai như vậy -' headersFun' là không xác định. – Danny

4

Câu hỏi cũ, nhưng tôi nghĩ nó đáng nhắc đến để tham khảo trong tương lai. Có giải pháp 'chính thức' cho điều này trong tài liệu hướng dẫn góc:

Nó đáng chú ý là gọi lại thành công cho get, truy vấn và phương pháp khác được thông qua trong phản ứng đến từ các máy chủ cũng như $ http tiêu đề hàm getter, vì vậy người ta có thể viết lại ví dụ trên và nhận được quyền truy cập vào http header như:

var User = $resource('/user/:userId', {userId:'@id'}); 

var users = User.query({}, function(users, responseHeaders){ 
    // ... 
    console.log(responseHeaders('x-app-pagination-current-page')); 
}); 

(mã từ tài liệu nhẹ được cập nhật cho rõ ràng)

Đối với các yêu cầu CORS, yêu cầu hiển thị tiêu đề như được đề cập trong các câu trả lời khác.

Các vấn đề liên quan