【发布时间】:2014-04-09 10:31:13
【问题描述】:
我遇到了以下问题。
我有以下嵌套/foreach 循环 ajax 调用结构:
var children = [];
$.fn.ajaxHelper.loadAjax({
url: someUrlReturningJsonOfChildren,
cache: true,
callback: function(options) {
var json = options.json;
$.each(json, function (i) {
// get the details of this child
$.fn.ajaxHelper.loadAjax({
url: urlForDetailsUsingId,
cache: true,
callback: function(options) {
var json = options.json;
children[i] = json;
}
});
}
}
});
// want to do something with (newly filled) children here
正如您可以想象的那样,我遇到了 ajax 调用是异步的(呃)的麻烦,但我只想在所有 ajax 调用都完成后才对子数组做一些事情。否则我显然在处理一个不完整的数组。
我一直在研究一些 jQuery 解决方案,例如 Deferred 对象(使用 $.when().then() 等),但只有在我没有 foreach 循环的情况下才能解决问题(至于我知道)。
此外,遗憾的是,由于对 API 的特定要求,更改 REST API(ajax 调用所在的位置)不是一种选择。
好的,事不宜迟:你们中的任何一个天才可以帮助我吗? :-)
【问题讨论】:
-
使用
$.when可以解决问题。你必须创建一个 promise 数组并使用 .apply 调用 $.when。这已经在这里讨论过几次了。 -
@FelixKling - 你是对的,这是重复的;此外,我更喜欢你的回答,而不是我的(下)。
-
我同意@FelixKling。我打算结束这个问题(因为重复和该问题的答案)。虽然讨厌放弃讨论,但也不能真正接受答案(因为我(不幸)重复的问题中有更好的答案。有人对可能的解决方案有想法吗?
标签: javascript jquery ajax knockout.js