2017-08-16 127 views
0

我目前正在尝试使用Flickr API和JavaScript基于搜索查询生成页面,在这种情况下是狗。当行未定义不是对象 - 尝试访问json对象时

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

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

的完整代码:

<!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> 
+2

[有作为 “JSON对象” 没有这样的事(http://benalman.com/news/2010/03/theres-no-这样的事情作为一个JSON /) –

+0

调试你的代码。在调试器中浏览它,检查变量的值。 SO不是人力远程调试服务。 – 2017-08-16 05:52:43

+0

谢谢@FelixKling我真的很高兴它像<=造成的那样简单,现在我已经拉了几天头发。我认为它没能在第一遍检索对象,并且非常困惑。我曾尝试过很多对象/访问数据解决方案,但没有考虑到它是由我的循环引起的。 我非常习惯于调试Java,但我仍然在学习Chrome/Safari的调试工具,所以下次我会记住这一点! – Rick

回答

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]);