1

我已经坐了几个小时了,我不明白为什么。

  • q正在工作中。该 URL 确实给了我正确的 JSON 响应。它在 Firebug 的 Net-tab 下的 JSON 选项卡下显示为对象和数组等等,一切都很好。我也尝试过使用其他我知道有效的 URL。同样的事情也会发生。

  • 我在我的小应用程序的其他地方有另一个功能,工作正常,并且几乎完全相同,只是另一个 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;
    }
    

请求 URL ( 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 类型是 text/html。然而,Firebug 将其解释为 JSON(如上所述)。所有标签词都来自应用程序的另一部分。

4

2 回答 2

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>
于 2009-11-16T11:16:27.967 回答
0

当我尝试网址时:http ://www.flickr.com/services/rest/?method=flickr.photos.search&format=json&api_key=a68277b574f4529ace610c2c8386b0ba&sort=interestingness-desc&per_page=10&tags=mongo

它返回数据,因为它应该 - 尝试将 getJSON 更改为 $.ajax() 并使用回调函数中的代码定义函数 jsonFlickrApi (data)。

如果这不起作用 - 请将代码发布到 jsbin.com <- 这样我们就可以现场试用 - 调试起来更容易。

于 2009-11-16T11:44:06.763 回答