2015-12-28 18 views
6

Sto cercando di ottenere informazioni da un'API di dati fantasy utilizzando AngularJS. Sto usando $ risorse per eseguire la mia richiesta di ottenere nel mio controller, ma non sono stato in grado di capire come includere correttamente la chiave API. Devo includerlo come intestazione? Grazie.AngularJS include la chiave API in una richiesta get

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); 

}]); 

Di seguito sono riportate le informazioni sulla richiesta http dal sito. http request info

+0

È necessario inviare anche la chiave di sottoscrizione senza che la chiave non sia possibile ottenere dati su API. – ZgrKARALAR

+0

@ZgrKARALAR In che modo inserisco correttamente la chiave di abbonamento nel mio codice? –

+0

Puoi aggiungere il tuo codice $ http.defaults.headers.common ["Ocp-Apim-Subscription-Key"] = sottochiave; scrivi la tua sottochiave se hai bisogno di maggiori dettagli controlla questa pagina [link] (http://www.angulartutorial.net/2014/05/set-headers-for-all-http-calls-in.html) – ZgrKARALAR

risposta

1

È necessario impostare un colpo di testa con la chiave API, AngularJS li trasmetterà ad ogni richiesta nel seguente caso:

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

Quando si aggiunge '.common' si sta dicendo angolare per inviare questo in ogni richiesta in modo non è necessario aggiungerlo a tutte le risorse che colpiscono l'API.

+1

E il luogo per impostare le intestazioni comuni di solito nel metodo run(). https://docs.angularjs.org/guide/module#module-loading-dependencies –

+0

Giusto, avrebbe dovuto chiarire – FRECIA

0

Un modo semplice per farlo è creare il proprio interceptors da $httpProvider in fase di "configurazione".

Per fare questo, basta scrivere qualcosa di simile:

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

è necessario modificare intestazione di richiesta in JSONP. Sfortunatamente non è possibile. Poiché il browser è responsabile della creazione dell'intestazione e non puoi manipolarlo quando usi il metodo JSONP.

how to change the headers for angularjs $http.jsonp

Set Headers with jQuery.ajax and JSONP?

Da quel collegamento - https://johnnywey.wordpress.com/2012/05/20/jsonp-how-does-it-work/

Perché non usare JSONP?
Decidere di non utilizzare JSONP è direttamente correlato a come funziona. Innanzitutto, l'unico metodo HTTP che puoi utilizzare è GET poiché è l'unico metodo supportato dai tag di script. Ciò elimina immediatamente l'uso di JSONP come opzione per interagire con le belle API RESTful che usano altri verbi HTTP per fare cose divertenti come CRUD. E mentre siamo sull'argomento di GET, tieni presente che non è possibile utilizzare altro che i parametri URL per comunicare con l'API del server (ad esempio, l'invio di alcuni JSON). (È possibile codificare JSON come parametro URL, ma vergognarsi di te anche solo a pensarlo.)

Se funzionano solo con la manipolazione dell'intestazione, è necessario effettuare tale chiamata dal lato server.

Problemi correlati