2015-12-28 15 views
6

Tôi đang cố gắng lấy thông tin từ API dữ liệu ảo sử dụng AngularJS. Tôi đang sử dụng $ tài nguyên để thực hiện yêu cầu nhận của tôi trong bộ điều khiển của tôi, nhưng tôi đã không thể tìm ra cách để bao gồm chính xác khóa API. Tôi có cần đưa nó vào làm tiêu đề không? Cảm ơn.AngularJS bao gồm khóa API trong yêu cầu nhận được

nflApp.controller('mainController', ['$scope','$resource','$routeParams', function($scope, $resource, $routeParams) { 

$scope.fantasyAPI = $resource("https://api.fantasydata.net/nfl/v2/JSON/DailyFantasyPlayers/2015-DEC-28", { callback: "JSON_CALLBACK" }, { get: { method: "JSONP"}}); 

console.log($scope.fantasyAPI); 

}]); 

Dưới đây là thông tin yêu cầu http từ trang web. http request info

+0

Bạn cũng cần gửi khóa đăng ký mà không có khóa đó không thể nhận dữ liệu trên api. – ZgrKARALAR

+0

@ZgrKARALAR Tôi sẽ bao gồm chính xác khóa đăng ký trong mã của tôi như thế nào? –

+0

Bạn có thể thêm mã $ http.defaults.headers.common ["Ocp-Apim-Subscription-Key"] = subkey; viết subkey của bạn nếu bạn cần thêm chi tiết kiểm tra trang này [link] (http://www.angulartutorial.net/2014/05/set-headers-for-all-http-calls-in.html) – ZgrKARALAR

Trả lời

1

Bạn nên đặt tiêu đề với khóa API, AngularJS sẽ gửi chúng với mọi yêu cầu trong trường hợp sau đây:

$http.defaults.headers.common["Ocp-Apim-Subscription-Key"] = key; 

Khi thêm '.common' bạn đang nói góc để gửi thông điệp này trong mọi yêu cầu để bạn không cần thêm nó vào mọi tài nguyên truy cập API.

+1

Và là nơi để thiết lập các tiêu đề chung thường là trong phương thức run(). https://docs.angularjs.org/guide/module#module-loading-dependencies –

+0

Phải, nên làm rõ – FRECIA

0

Cách dễ dàng để thực hiện điều đó là tạo interceptors của riêng bạn từ $httpProvider tại "config" fase.

Để làm điều đó, chỉ cần viết một cái gì đó như:

mymodule.config(['$httpProvider', function($httpProvider){ 

$httpProvider.interceptors.push(function ($q) { 
      return { 
       'request': function (config) { 
        config.headers['Ocp-Apim-Subscription-Key'] = SomeUserClass.AuthToken(); 

        return config; 
       }, 

       'response': function (response) { 



        return response; 
       } 
      }; 
     }); 

}); 
0

Bạn cần phải sửa đổi tiêu đề yêu cầu trong JSONP. Thật không may là không thể. Vì trình duyệt chịu trách nhiệm tạo tiêu đề và bạn không thể thao tác điều đó khi sử dụng phương thức JSONP.

how to change the headers for angularjs $http.jsonp

Set Headers with jQuery.ajax and JSONP?

Từ liên kết - https://johnnywey.wordpress.com/2012/05/20/jsonp-how-does-it-work/

Tại sao không sử dụng JSONP?
Quyết định sử dụng JSONP có liên quan trực tiếp đến cách hoạt động của JSONP. Trước hết, phương thức HTTP duy nhất bạn có thể sử dụng là GET vì đó là phương thức hỗ trợ thẻ script duy nhất. Điều này ngay lập tức loại bỏ việc sử dụng JSONP như một tùy chọn để tương tác với các API RESTful tốt đẹp sử dụng các động từ HTTP khác để thực hiện các công cụ thú vị như CRUD. Và mặc dù chúng tôi đang trong chủ đề GET, lưu ý rằng việc sử dụng bất kỳ thông tin nào khác ngoài tham số URL để giao tiếp với API máy chủ (ví dụ: gửi một số JSON qua) cũng không thể thực hiện được. (Bạn có thể mã hóa JSON dưới dạng tham số URL, nhưng đáng xấu hổ với bạn vì đã nghĩ đến điều đó.)

Nếu chúng chỉ hoạt động với thao tác tiêu đề, bạn sẽ cần thực hiện cuộc gọi đó từ phía máy chủ.

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