我昨晚大部分时间都在JQuery中针对Flickr API尝试"getJSON"方法。我设法查看了JQuery文档中的一些示例,并使它们发挥了作用,但从我的自定义API调用中读取JSON的尝试却失败了。
代码段:
这项工作:
//JQuery Flickr example code - works!
$.getJSON("http://api.flickr.com/services/feeds/photos_public.gne?jsoncallback=?&format=json",
function(data) {
$.each(data.items, function(i,item){
alert(item.media.m);
if ( i == 3 ) return false;
});
});
此操作失败
//Custom Flickr API Call - nothing?fail?
$.getJSON("http://api.flickr.com/services/rest/?method=flickr.photos.search&api_key=c258d8ae4c29bb74da198c6ac3874671&text=Mclaren&per_page=3&format=json&callback=?&nojsoncallback=1",
function(data) {
alert(data);
}).error(function(jqXHR, textStatus, errorThrown) { alert(textStatus + errorThrown); });
第二个API调用是一个有效的资源,它在浏览器/fiddler中工作,我可以看到JSON内容,但在我的JS代码中,一个错误被引发
"parsererrorError: jQuery18007627279118169099_1345796861535 was not called".
在这一点上,我陷入了困境,最终我的最终目标是处理嵌套数组中每个"照片"对象上返回的JSON和itterate,这样我就可以在迭代过程中轻松访问它们的子属性,比如:
[照片实例].id
[照片实例].所有者
[照片实例].secret等等。
如有任何帮助,我们将不胜感激。
参考:http://www.flickr.com/services/api/response.json.html
注意:所有API密钥用于测试目的,将很快销毁。
来自Jquery文档:
如果URL包含字符串"callback=?"(或类似的字符串,如服务器端API),则该请求被视为JSONP。请参阅讨论$.ajax()中的jsonp数据类型以获取更多详细信息。
由于您的URL包含callback=?
,jQuery getJSON
函数正在等待一个(动态指定的)回调调用,即JSONP样式。但是,当您在URL中指定nojsoncallback
时,服务器会发送您提供的文档中指定的标准JSON内容:
如果您只想要没有函数包装的原始JSON,请添加参数nojsoncallback,值为1。
从您的URL中删除callback=?
,您应该会没事的。
添加&nojsoncallback=1在结束
https://api.flickr.com/services/feeds/photos_public.gne?format=json&nojsoncallback=1