Javascript 如何等待getJSON获取jQuery中的所有记录

Javascript 如何等待getJSON获取jQuery中的所有记录,javascript,jquery,getjson,flickr,Javascript,Jquery,Getjson,Flickr,我有一个脚本,我使用jQuery从Flickr中提取照片。我正在使用zFlickrFeed脚本。我需要从Flickr中获得300张图片,但目前我获得了20张。我想这是因为我的getJSON方法在完成之前被中断了 我如何等到所有300个都消失了,然后调用我的条件方法?条件中的方法实质上将JSON数据呈现为网格或列表样式的布局 (function($){ $.fn.flickrfeed = function(userid, tags, options) { // Set plugin d

我有一个脚本,我使用jQuery从Flickr中提取照片。我正在使用zFlickrFeed脚本。我需要从Flickr中获得300张图片,但目前我获得了20张。我想这是因为我的
getJSON
方法在完成之前被中断了

我如何等到所有300个都消失了,然后调用我的条件方法?条件中的方法实质上将JSON数据呈现为网格或列表样式的布局

(function($){
$.fn.flickrfeed = function(userid, tags, options) { 

    // Set plugin defaults
    var defaults = {
        limit: 300,
        header: true,
        layout: 'list',
        imagesize: 'small',
        titletag: 'h4',
        title: true,
        description: true,
        date: true
    };  

    var options = $.extend(defaults, options); 

    // Functions
    return this.each(function(i, e) {
        var $e = $(e);

        // Add feed class to user div
        if (!$e.hasClass('flickrFeed')) $e.addClass('flickrFeed');

        // Define Flickr feed API address
        var api = 'http://api.flickr.com/services/feeds/photos_public.gne?lang=en-us&format=json&jsoncallback=?';
        if (userid != '') api += '&id=' + userid;
        if (tags != '') api += '&tags=' + tags;

        // Send request
        $.getJSON(api, function(data) {
            // Process the feeds
            if(options.layout == 'list') {
                _callback(e, data, options);
            }
            else if(options.layout == 'grid') {
                _altcallback(e, data, options);
            }
        });             
    });
};

我会创建一个计数器,一旦它达到所需的调用次数,我就会点击success函数

我想补充一点:
var计数器=此长度
在$.getJSON success函数中,我要添加:
如果(--计数器>0)返回
代码如下:

var counter = this.length;
return this.each(function(i, e) {`

    var $e = $(e);

    // Add feed class to user div
    if (!$e.hasClass('flickrFeed')) $e.addClass('flickrFeed');

    // Define Flickr feed API address
    var api = 'http://api.flickr.com/services/feeds/photos_public.gne?lang=en-us&format=json&jsoncallback=?';
    if (userid != '') api += '&id=' + userid;
    if (tags != '') api += '&tags=' + tags;

    // Send request
    $.getJSON(api, function(data) {
        if (--counter > 0) return;
        // Process the feeds
        if(options.layout == 'list') {
            _callback(e, data, options);
        }
        else if(options.layout == 'grid') {
            _altcallback(e, data, options);
        }
    });             

    });

您是否尝试将getJSON重写为成熟的$.ajax调用,然后使用.done()或success函数调用

$.ajax({
url:api
}).完成(功能(数据){
//加工饲料
});

$.ajax({
url:api
成功:
功能(数据){
//加工饲料
}

});

您是否尝试添加一些检查以确保这是因为您的
getJSON
?可以尝试使用
ajaxSetup()将
async
设置为
false。我不明白您为什么返回这个。each()。您确定这不是Flickr API的限制吗?@FIA2008:请不要建议使用
async:false
。从jQuery 1.8开始,它就被弃用了,它会在请求完成之前锁定浏览器,从而创造了糟糕的用户体验。我不知道为什么Cerburs会将其作为副本关闭,因为它不是。