2013-08-23 19 views
9

99% cuộc gọi ajax của tôi cần một "X-API-TOKEN" cụ thể để xác thực và giao tiếp với Rails REST API của tôi. Nhưng tôi cũng đang thực hiện cuộc gọi tới một API bên thứ ba và tôi vẫn gặp lỗi khi nói "Yêu cầu trường tiêu đề X-API-TOKEN không được cho phép bởi Access-Control-Allow-Headers."Làm cách nào để xóa tiêu đề mặc định chỉ cho các yêu cầu XHR cụ thể trong AngularJS?

Tất cả mọi thứ hoạt động tốt nếu tôi xóa chúng header ngay trước khi cuộc gọi, và một công việc xung quanh sẽ được xóa và sau đó thêm lại sau cuộc gọi, nhưng là có một cách dễ dàng hơn này:

apiToken = $http.defaults.headers.common["X-API-TOKEN"] 
    delete $http.defaults.headers.common["X-API-TOKEN"] 

    $http(
     method: "GET" 
     url: 'http://...}}' 
    ).success((data, status, headers, config) -> 
    ).error (data, status, headers, config) -> 

    $http.defaults.headers.common["X-API-TOKEN"] = apiToken 

Trả lời

4

Đối tượng cấu hình dịch vụ $http cho phép bạn ghi đè tiêu đề http gửi cho một yêu cầu cụ thể. Xem thuộc tính cấu hình headers.

Điều này có thể lấy danh sách tiêu đề hoặc hàm trả về danh sách tiêu đề. Vì vậy, đối với yêu cầu tiêu đề không xác thực, hãy tạo một bản sao của tiêu đề mặc định xóa tiêu đề bạn không yêu cầu và sau đó thực hiện yêu cầu. Bạn có thể lưu trữ để sử dụng sau này.

Xem $httpdocumentation

+0

Giải pháp này là tốt cho chúng ta chỉ có một khóa, nhưng nếu chúng ta có nhiều tiêu đề tùy chỉnh và có nhiều cuộc gọi api bên ngoài mà chúng tôi không cần các tiêu đề này. Chúng ta có thể đạt được điều này bằng cách sử dụng transformRequest không? –

13

Đặt tiêu đề mong muốn/tiêu đề để undefined như thế này, sau đó nó sẽ không ảnh hưởng đến các thiết lập toàn cầu.

$http({ 
     method: 'GET', 
     url: 'someurl', 
     headers: { 
      'X-API-TOKEN': undefined 
     } 
     } 
    ) 
+1

undefined là cách. Chúc mừng Eduardo – SkyBlues87

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