我昨晚花了大部分时间在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并对嵌套数组中的每个'photo'对象进行迭代,这样我就可以在迭代过程中轻松访问它们的子属性,如下所示:
[光实例] .ID
[光实例] .owner
[光实例] .secret 等...
非常感谢任何帮助。
参考: http://www.flickr.com/services/api/response.json.html
注意:所有API密钥均用于测试目的,很快就会销毁。
答案 0 :(得分:2)
如果网址包含字符串“callback =?” (或类似的,由...定义) 在服务器端API),请求被视为JSONP。见 讨论$ .ajax()中的jsonp数据类型以获取更多详细信息。
当您的URL包含callback=?
时,jQuery getJSON
函数正在等待(动态指定的)回调调用JSONP样式。但是,当您在URL中指定nojsoncallback
时,服务器会发送您提供的文档中指定的标准JSON内容:
如果您只想要原始JSON,没有函数包装器,请添加 参数nojsoncallback,其值为1。
从您的网址中删除callback=?
,您应该没问题。
答案 1 :(得分:0)
在最后添加& nojsoncallback = 1
https://api.flickr.com/services/feeds/photos_public.gne?format=json&nojsoncallback=1