1

我正在尝试使用 Tumblr API 实现照片提要。到目前为止,它只适用于文本,但是当我尝试照片时,我得到了错误

Cannot read property 'alt_sizes' of undefined

我不确定如何纠正我的代码来解决这个问题。我的代码是:

$.ajax({
    url: "http://api.tumblr.com/v2/blog/myblog.tumblr.com/posts?api_key=key&tag=offers",
    dataType: 'jsonp',
    success: function(results){

    var i = 0;

     while (i < 10) {

       var type = results.response.posts[i].type;
       var date = results.response.posts[i].date;
       var link = results.response.posts[i].post_url;

       if (type == "photo") {
         var photourl = results.response.posts[i].photos[i].alt_sizes[i].url;
         $("#tumoffers").append("<div class='tumpost'><a href='" + link + "'><img src='" + photourl + "' alt='" + title + "'/></a></div>");
       }

      i++;
     }//END WHILE

    }//END RESULTS FUNCTION
});

查看 Tumblr API 文档,我看到它alt_sizes转换为图像的大小,但我不想使用这个属性。

有谁知道如何让 API 忽略这个属性?

4

2 回答 2

1

我发现它出错了,因为每个帖子可以有多张照片,所以线条

.photos[i].alt_sizes[i]

实际上在主帖子数组中的不同数组中。

在我的情况下,我每个帖子只使用 1 张照片,所以我只是将其更改为

.photos[0].alt_sizes[0]

但要正确地做到这一点,您应该为每个帖子的照片创建另一个循环。

于 2013-09-26T00:15:44.583 回答
1

您可以在实际尝试访问之前使用hasOwnProperty检查此类属性是否存在,例如:

var data = results.response,
    i = results.response.total_posts; //this gives total posts you have
while (i < 10) {
    var type = data.posts[i].type,
        date = data.posts[i].date,
        link = data.posts[i].post_url;

   if( "photo" == type ) {
        if( data.posts[i].hasOwnProperty("alt_sizes") {
           var photourl = results.response.posts[i].photos[i].alt_sizes[i].url;
           $("#tumoffers").append("<div class='tumpost'><a href='" + link + "'><img src='" + photourl + "' alt='" + title + "'/></a></div>");
        }
   }
   i++;
}
于 2013-09-25T07:04:01.103 回答