【发布时间】:2015-08-17 12:17:37
【问题描述】:
我正在使用 Angular JS。我的目标是根据位置获取 flickr 图像列表,并获取从请求返回的图像 ID,并将它们传递到另一个请求中,以获取要在结果中显示的每张照片的更多信息。这是我所拥有的,但我似乎无法从我的第二个搜索函数返回正确的值。虽然这似乎是一个很长的问题,但我真的只想知道如何在我的第二个函数中获得正确的值,以便我可以将它分配给我的结果。
这是在我的 services.js 中
//flickr location search
APIRequest.fkrSearch = function(lat, lon, rad){
fkrAPI = $resource('https://api.flickr.com/services/rest/?method=flickr.photos.search&api_key=5956ffe850b325e0b121525800af5b31&lat='+lat+'&lon='+lon+'&radius=5km&format=json&nojsoncallback=1', { dataType: 'jsonp', jsonp: 'jsoncallback' });
return fkrAPI.get().$promise.then(function (data){
console.log(data);
return data;
});
};
这是我在控制器中的请求。
$scope.resultPosts = []; //global variable to hold results
if ($scope.locationSearch.dataSource.fkr){
$scope.fkrLoading = true;
console.log('search Flickr');
OSINTAPIRequest.fkrSearch($scope.lat, $scope.lng, $scope.radius).then(function(data){
if (data.error){
toastr.error(data.error.error_msg, 'Flickr Error['+data.error.error_code+']');
} else {
if (data.photos.photo.length > 0){
var fkrAppend = 0;
for(var i=0; i < data.photos.photo.length; i++){
fkrAppend++;
var fkrImageId = data.photos.photo[i].id;
$scope.resultPosts.push({
SourcePostID: data.photos.photo[i].id,
Timestamp: '',
PostLatitude: $scope.fkrGetLatLng(data.photos.photo[i].id),
PostLongitude: $scope.fkrGetLatLng(data.photos.photo[i].id),
PostMedia: 'https://farm'+data.photos.photo[i].farm+'.staticflickr.com/'+data.photos.photo[i].server+'/'+data.photos.photo[i].id+'_'+data.photos.photo[i].secret+'.jpg',
PostType: 'image',
PostAvatar: 'https://pingendo.github.io/pingendo-bootstrap/assets/user_placeholder.png',
PostMarker: 'assets/img/fkrMarker.png',
DataSource: 'flickr',
Display:$scope.resultFilter.fkr
});
}
此函数返回在给定纬度/经度中进行地理标记的照片的图像 ID 列表,但不返回结果中的实际位置数据,以便我传递给结果并在地图上绘制点。因此,您会在我的 resultsPosts.push 中看到,我正在尝试将返回的图像 ID 传递给 fkrGetLatLng 函数,该函数使用这一行 (PostLatitude: $scope.fkrGetLatLng(data.photos.photo[i].id))... 函数看起来像这样。
$scope.fkrGetLatLng = function (fkrImageId){
OSINTAPIRequest.fkrGetLatLong(fkrImageId).then(function(data){
var fkrLat = data.photo.location.latitude;
var fkrLng = data.photo.location.latitude;
//console.log (fkrLat+','+fkrLng);
return fkrLat;
});
}
这是服务 JS 中的请求。我为每个请求返回了正确的数据,但它没有为 PostLatitude 分配正确的值(或任何值)。
//flickr location search - get lat long
APIRequest.fkrGetLatLong = function(fkrImageId){
fkrAPI = $resource('https://api.flickr.com/services/rest/?method=flickr.photos.geo.getLocation&api_key=5956ffe850b325e0b121525800af5b31&photo_id='+fkrImageId+'&format=json&nojsoncallback=1', { dataType: 'jsonp', jsonp: 'jsoncallback' });
return fkrAPI.get().$promise.then(function (data){
//console.log(data);
return data;
});
};
【问题讨论】:
-
您的意思是在 fkrGetLatLng 中同时将 data.photo.location.latitude 分配给 fkrLat 和 fkrLng 吗?
-
不完全是。在尝试让 fkrGetLatLng 返回两个值之前,我这样做只是为了测试函数。
标签: javascript arrays angularjs rest flickr