Набор Flickr API JSON
Я создаю довольно простую неограниченную фотостраницу, которая получает фотографии из набора Flickr. У меня есть следующий код:
$(window).load(function() {
var apiKey = 'XXX';
var userId = 'XXX';
var photoset_id = 'XXX';
$.getJSON('http://api.flickr.com/services/rest/?format=json&method=flickr.photosets.getPhotos&photoset_id=' + photoset_id + '&per_page=1000' + '&page=1' + '&api_key=' + apiKey + '&user_id=' + userId + '&jsoncallback=?', function(data) {
$.each(data.photoset.photo, function(i, FlickrPhoto){
var basePhotoURL = 'http://farm' + data.photos.FlickrPhoto[i].farm + '.static.flickr.com/'
+ data.photos.FlickrPhoto[i].server + '/' + data.photos.FlickrPhoto[i].id + '_' + data.photos.FlickrPhoto[i].secret + ".jpg";
var a_href = "http://www.flickr.com/photos/" + data.photoset.owner + "/" + FlickrPhoto.id + "/";
$("<img/>").attr("src", basePhotoURL).appendTo("#photographs").wrap(("<div class='item'></div>"))
});
});
});
Я получаю следующую ошибку, и я не могу понять, почему. Вероятно, крупный сбой, но не видя этого..
TypeError: data.photos is undefined
[Break On This Error]
...asePhotoURL = 'http://farm' + data.photos.FlickrPhoto[i].farm + '.static.flickr....
1 ответ
Решение
Изменить свой JQuery $.each
, Вам не нужно использовать i
индексировать каждую фотографию. Функция выполняется для каждого элемента в photo
массив. flickrPhoto
поэтому представляет каждый элемент из data.photoset.photo
так что вам не нужно ставить перед ним data.photos
,
$.each(data.photoset.photo, function(i, flickrPhoto){
var basePhotoURL = 'http://farm' + flickrPhoto.farm + '.static.flickr.com/'
+ flickrPhoto.server + '/' + flickrPhoto.id + '_' + flickrPhoto.secret + ".jpg";
var a_href = "http://www.flickr.com/photos/" + data.photoset.owner + "/" + flickrPhoto.id + "/";
$("<img/>").attr("src", basePhotoURL).appendTo("#photographs").wrap(("<div class='item'></div>"))
});