jQuery getJSON永远不会进入其回调函数

时间:2009-11-16 11:08:37

标签: javascript jquery ajax flickr

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

  • 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(如上所述)。所有标记词都来自应用程序的另一部分。

2 个答案:

答案 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)

当我尝试网址时: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&lt; - 所以我们可以试一试 - 这样更容易调试。