我是angularJS的新手,正试图弄清楚如何向外部服务器发出GET请求。这是他们的文档列出一个示例请求:
示例请求
curl-H'接受:application/vnd.titchtv.v2+json'-H'授权:OAuth[access_token]'\-X获取https://api.twitch.tv/kraken
我正试图从我的控制器调用一个服务来进行这个RESTful调用,这就是我目前所拥有的:
控制器:
angular.module('myAppController')
.controller('LandingCtrl', ['$scope', 'twitchService',
function($scope, twitchService) {
// assume access token is a variable that's been set by this point
twitchService.getUserRootInfo({accesstoken : access_token})
.success(function(rootInfoResponse,status,headers){
// do stuff with rootInfoResponse
});
}]);
服务:
var myAppServices = angular.module('myAppServices', ['ngResource'])
myAppServices.factory('twitchService', ['$resource',
function($resource) {
return $resource('https://api.twitch.tv/kraken', {}, {
getUserRootInfo: {
// not sure what to put here...
// how do I use the variable I (hopefully) passed in here "accesstoken" from my controller?
}
});
}
]);
首先,到目前为止,我的代码是正确的吗?其次,API文件规定如下:
所有API方法都通过提供回调参数来支持JSON-p请求。
我过去已经遇到过跨域请求的交叉问题,并且知道同源策略,所以这是否意味着我必须在服务中使用JSONP请求?如果是的话,有人能示范一下怎么做吗?
因此,如果您需要在调用中传递参数,则需要使用类似的POST
getUserRootInfo: function(token) {
return $http.post(URL, {'token':token}).
success(function(data) {
// The call succeeded.
}).error(function(data) {
// the call failed
});
}
或者这个的一些变体。你可以这样称呼它:
var promise = twitchService.getUserRootInfo(mytoken);
promise.then(function(response) {
// check response.data if you have values coming back that need to be checked
});
当然,你可以根据返回的内容等进行切换,以匹配你的风格,但这是它如何工作的基本要点。