我已经和他坐了几个小时了,我不明白为什么。
q
正在运作。 URL确实给了我一个正确的JSON响应。它显示为对象和数组以及在Firebug中的Net-tab下的JSON选项卡下的所有内容都很好。我也尝试过其他知道工作的网址。同样的事情发生了。
我在我的小应用程序的其他地方有另一个功能,wihch工作正常,几乎完全相同,只是另一个API,并从其他地方调用。工作正常,data
变量在进入getJSON函数时被填充。在这里,data
永远不会充满任何东西。
我在Firebug中的每一行都有断点,没有结果。什么都没发生。它只是到达getJSON行,然后跳转到函数后的调试器语句。
var usedTagCount = 10;
var searchHits = 20;
var apiKey = "a68277b574f4529ace610c2c8386b0ba";
var searchAPI = "http://www.flickr.com/services/rest/?method=flickr.photos.search&" +
"format=json&api_key=" + apiKey + "&sort=interestingness-desc&per_page="
+ searchHits + "&jsoncallback=?&nojsoncallback=1&tags=";
var tagString = "";
var flickrImageData = new Array();
function search(query) {
for(var i = 0; i < usedTagCount; i++) {
tagString += query[i].key + ",";
}
var q = searchAPI + tagString;
$.getJSON(q, function(data) {
debugger; /* It never gets here! */
$.each(data.photos.photo, function(i, item) {
debugger;
flickrImageData.push(item);
});
});
debugger;
return flickrImageData;
}
q
):http://www.flickr.com/services/rest/?method=flickr.photos.search&format=json&api_key=a68277b574f4529ace610c2c8386b0ba&sort=interestingness-desc&per_page=20&jsoncallback=?&tags=london,senior,iphone,royal,year,security,project,records,online,after,
我确实很奇怪,因为JSONView(firefox插件)无法正确格式化,它不是真正返回的JSON - mime-type是text / html。然而,Firebug将其解释为JSON(如上所述)。所有标记词都来自应用程序的另一部分。
答案 0 :(得分:1)
我认为您可能需要删除
nojsoncallback=1
来自searchAPI字符串的。
Flickr使用JSONP启用跨域调用。此方法需要将JSON包装在json回调中,nojsoncallback = 1参数将删除此包装。
编辑:显然它适用于nojsoncallback = 1,我得到了这段代码为我工作。您使用的是什么jQuery版本? JSONP仅适用于1.2及以上版本。
这适合我(稍作修改):
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.3.2/jquery.min.js"></script>
<script type="text/javascript">
var usedTagCount = 1;
var searchHits = 20;
var apiKey = "a68277b574f4529ace610c2c8386b0ba";
var searchAPI = "http://www.flickr.com/services/rest/?method=flickr.photos.search&" +
"format=json&api_key=" + apiKey + "&sort=interestingness-desc&per_page="
+ searchHits + "&jsoncallback=?&nojsoncallback=1&tags=";
var tagString = "";
var flickrImageData = new Array();
function search(query) {
tagString = query;
var q = searchAPI + tagString;
$.getJSON(q, function(data) {
$.each(data.photos.photo, function(i, item) {
debugger;
flickrImageData.push(item);
});
});
}
search("cat");
</script>
答案 1 :(得分:0)
它返回数据,因为它应该 - 尝试将getJSON更改为$ .ajax()并定义函数jsonFlickrApi(data) 使用你在回调函数中的代码。
如果不起作用 - 请将代码发布到jsbin.com&lt; - 所以我们可以试一试 - 这样更容易调试。