getJSON jQuery不会填充对象

时间:2014-06-09 19:09:22

标签: javascript jquery json asynchronous

所以我有一些代码可以从API中检索一系列对象。当我尝试将它们存储在全局变量中时,它似乎没有做任何事情。这是代码:

var current_corpus = {};

function page_init() { 
  $.getJSON("http://resource1.com", function(data) {
    populate_collections(data);
    populate_citations(data);
  });
}

function populate_collections(collections) {
  $.each(collections, function (i, item) {
    current_corpus[item] = [];
  });
}

function populate_citations(collections) { 
  $.each(collections, function (index, collection) {
    $.getJSON("http://resource2.com/" +   collection.collection_id, function(data) {
      current_corpus[collection] = data;
      console.log(current_corpus);
    });
  });
}

完成后,current_corpus完全为空。记录这些项目将验证它们是否从我发布的资源返回。我认为我缺少这些调用的异步性质。

该行

current_corpus[item] = [];

是多余的我认为是行

current_corpus[collection] = data;
在将数据绑定到密钥对象时,

应该做同样的事情。无论哪种方式,在这些函数的末尾运行尝试通过控制台访问current_corpus只会给我一个空对象。

处理这样的AJAX的资源也是值得赞赏的。

1 个答案:

答案 0 :(得分:1)

这完全取决于ajax请求完成时您想要做什么。 A中的ajax代表Asynchronous,意味着此类请求是非阻塞的 - 即当控件移动到下一行时,它们将在后台运行。这解释了为什么你在调用ajax请求的函数之后立即看到一个空对象。

您可以确认您的代码运行正常,或者您可以使用以下代码段完成所有请求后执行的操作:

$(function() {
    $(document).on('ajaxStop', function() {
        console.log( current_corpus );
        //do something with the now fully constructed object
    });
});