我有一些非常接近我需要的东西,但我必须遗漏一些东西。
这是我的代码:
$.ajax({
url: "http://api.tumblr.com/v2/blog{my-blog}/posts?limit=50",
dataType: 'jsonp',
data: {
api_key: "{my key}"
},
success: function(results){
console.log(results);
var i = 0;
while (i < 50) {
var type = results.response.posts[i].type;
console.log(results.response.posts.length);
if (type == "photo") {
var getImages = results.response.posts[i].photos[i].alt_sizes[0].url;
$("#tumblr-posts").append("<div class='postbody'>" + "<img src=" + getImages + " /></div>");
}
i++;
}
}
});
这是从我的博客中返回大尺寸的第一张图片,但我也在控制台中收到错误:无法读取未定义的属性'alt_sizes'。我尝试了一些变化,但购买我的逻辑循环应该返回所有帖子.posts [i],所有照片.photos [i]然后alt_sizes [0]数组中的第一个图像应该是大图像。
控制台显示正在返回50个对象,因此对API的调用是正常的。
任何帮助非常感谢。
答案 0 :(得分:3)
您正在使用计数器i
来选择posts
和photos
的特定属性,这就是它返回undefined的原因,例如:
i = 1;
var getImages = results.response.posts[1].photos[1].alt_sizes[0].url;
posts[1]
是回复中的第二篇帖子,但photos[1]
引用了posts[1]
的第二张照片,可能不存在作为单个照片信息。
你需要创建另一个循环来检查每个帖子多张照片,照片最多可以有10张照片。
var i = 0;
while (i < 50) {
var type = results.response.posts[i].type;
if (type == "photo") {
var photos = results.response.posts[i].photos;
for (var j = 0; j < photos.length; j++) {
console.log( photos[j].alt_sizes[0].url );
}
}
i++;
}
还值得一提的是,在较旧的图片上,如果没有高分辨率版本可用,它不会回退到另一个URL,其左边空白,所以您可能还需要检查它。