所以我有一些代码可以从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的资源也是值得赞赏的。
答案 0 :(得分:1)
这完全取决于ajax
请求完成时您想要做什么。 A
中的ajax
代表Asynchronous
,意味着此类请求是非阻塞的 - 即当控件移动到下一行时,它们将在后台运行。这解释了为什么你在调用ajax请求的函数之后立即看到一个空对象。
您可以确认您的代码运行正常,或者您可以使用以下代码段完成所有请求后执行的操作:
$(function() {
$(document).on('ajaxStop', function() {
console.log( current_corpus );
//do something with the now fully constructed object
});
});