未定义不是对象 - 尝试访问json对象时

时间:2017-08-16 05:44:57

标签: javascript

我目前正在尝试使用Flickr API和javascript来生成基于搜索查询的页面,在本例中为dog。当行

var hyperLink = "https://www.flickr.com/photos/" + photo.owner + "/" + photo.id + ".jpg";

运行状态undefined不是关于photo.owner的对象。我可以使用console.log(photo.owner)打印出photo.owner,但无法访问它只是打印出网址中的信息。

完整代码是:

<!DOCTYPE html>
<html lang="en">
<head>
    <title>The Flickr Experiment</title>
</head>
<body id ="1">


<script>
    function jsonFlickrApi(rsp) {
        var str = "";
        str +="<h1>Doggo piccies from Flickr</h1>"; 
        str +="<h3>Total piccies: " + rsp.photos.photo.length;
        var i;
        for (i = 0; i <= rsp.photos.photo.length; i++) { 
        var photo = rsp.photos.photo[i];
        var imageTitle = photo.title;
        var hyperLink = "https://www.flickr.com/photos/" + photo.owner + "/" + photo.id + ".jpg";
        var imgLink = "https://farm" + photo.farm + ".staticflickr.com/" + photo.server + "/" + photo.id + "_" + photo.secret + "_t.jpg";
        str +="<a href=\"" + hyperLink + "\"><img alt=\"" + imageTitle + "\" src=\"" + imgLink + "\"/></a>"
        }

        document.writeln(str);
    }
</script>


<script src="https://api.flickr.com/services/rest/?method=flickr.photos.search&api_key=XXXXf&tags=golden-retriever&per_page=100&format=json">
</script>
</body>

</html>

1 个答案:

答案 0 :(得分:1)

数组基于零。这意味着如果数组的长度为3,则最高索引为2.因此循环条件必须为

i < rsp.photos.photo.length
//^^ strictly smaller, not smaller or equal

如果没有,你将访问一个不存在的索引(即数组的长度),这将导致undefined,你得到的错误。

简单示例:

var arr = [1,2,3];
console.log(arr[0]);
console.log(arr[1]);
console.log(arr[2]);
console.log(arr[arr.length]);