我在AngularJS中绝对是新手,我正在研究一个教程,展示如何访问此外部天气预报API:http://openweathermap.org/forecast以检索和使用天气信息。
所以,在我的应用程序中,我有一个这样的控制器:
weatherApp.controller('forecastController', ['$scope', '$resource', '$routeParams', 'cityService', function($scope, $resource, $routeParams, cityService) {
// It contain the city selected in the view:
$scope.city = cityService.city;
$scope.days = $routeParams.days || 2;
$scope.weatherAPI = $resource("http://api.openweathermap.org/data/2.5/forecast/daily",
{ APPID: 'MY_PERSONAL_KEY',
callback: "JSON_CALLBACK",
cnt: 5
},
{ get: { method: "JSONP" }});
$scope.weatherResult = $scope.weatherAPI.get({ q: $scope.city, cnt: $scope.days });
$scope.convertToFahrenheit = function(degK) {
return Math.round((1.8 * (degK - 273)) + 32);
}
$scope.convertToDate = function(dt) {
return new Date(dt * 1000);
};
}]);
我发现一些困难,以了解服务的确切调用方式以及需要的信息。
所以从我的理解(但我绝对不确定它如此纠正我,如果我做错了断言)我有以下情况:
1)在控制器中,我注入了Angular提供的 $ resource 服务,据我所知,这是一个可用于友好的RESTful Web服务交互的对象。
所以通过这一行:
$scope.city = cityService.city;
我将一个城市(由用户在视图中插入)放入此控制器的 $ scope 的 city 属性中,它将是用户之一用于webservice查询的参数。
然后我在 $ scope 对象上创建 weatherAPI 属性,我认为该属性应代表访问此资源的方式
$scope.weatherAPI = $resource("http://api.openweathermap.org/data/2.5/forecast/daily",
{ APPID: 'MY_PERSONAL_KEY',
callback: "JSON_CALLBACK"
},
{ get: { method: "JSONP" }});
所以我认为 weatherAPI 是由 $ resource 服务创建的资源对象(或者我错过了什么?)。
在此我设置了Web服务URL(http://api.openweathermap.org/data/2.5/forecast/daily)和几个JSON对象,这些:
{
APPID: 'MY_PERSONAL_KEY',
callback: "JSON_CALLBACK"
},
我在其中声明了 APPID 字段,这是我的个人密钥以使用密钥和回调:“JSON_CALLBACK”字段。究竟是什么代表了回调字段?
第二个目标:
{get:{method:“JSONP”}}
好的,对我来说,这两个对象的争论非常模糊。
究竟是什么定义的?在我看来,这是与我的应用程序的安全性有关的东西,但我绝对不确定它
最终,它通过以下方式从Web服务检索数据:
$scope.weatherResult = $scope.weatherAPI.get({ q: $scope.city, cnt: $scope.days });
我认为我只是传递了2个参数(类似于?q = value&?cnt =经典HTTPrequest的值)
答案 0 :(得分:0)
所以我认为weatherAPI是由$ resource服务创建的资源对象(或者我错过了什么?)。
不,你没有遗漏任何东西。 weatherAPI
正如您认为的那样。
其中我声明APPID字段是我的个人密钥以使用密钥和回调:“JSON_CALLBACK”字段。究竟代表这个回调字段的是什么?
callback
字段只是每个请求传递给API的默认GET参数。它在此处设置,因此您不必在每次从API请求内容时都将其传递。
究竟是什么定义的?在我看来,这是与我的应用程序的安全性有关的东西,但我绝对不确定它
传递给$resource
调用的第三个参数是API上可用方法的定义。
在外部对象中,键是方法的名称。它只是该方法可用的名称。 value是该方法的设置对象,在这种情况下,它只指定方法的类型,即“JSONP”。
JSONP是一种特殊类型的请求,它只能是一个“GET”请求,浏览器不允许在这里“POST”。 JSONP必须返回简单的函数调用,将一个参数传递给它,JSON带有结果数据。此函数将在您的JavaScript上调用。
JSONP只是进行跨站点调用的一种解决方法。