【发布时间】:2013-08-25 01:08:48
【问题描述】:
我正在尝试从 API 异步加载一堆数据,当所有数据都加载完毕后,我想触发一个事件,即所有数据都已加载。我遇到的问题是我使用的 API 将响应对象的数量限制为五个。而且我可能需要检索 30-40 个响应对象。
所以我想要做的是创建一个 when - then 语句,该语句循环遍历数据项并每五个项目发出请求,然后当所有项目都加载时,我想触发加载事件。我遇到的问题是 when-then 语句在 ajax 请求成功之前完成。
在我尝试过的代码上。
function loadsLotsOfStats(stats, dataType, eventName, dataName, callback) {
var groupedStats = [];
while (stats.length > 0) {
groupedStats.push(stats.splice(0, 5).join('/'));
}
j$.when(
groupedStats.forEach(function (d) {
loadJSONToData(model.apiUrl.replace("{IDS}", d), "json", "", dataName, function (d) { /*console.log(d);*/ }, true)
})
).then(function () {
j$(eventSource).trigger('dataLoaded', eventName);
});
loadJSONToData 函数基本上只是 Async $.ajax 的包装函数。
所以是的,事件在数据实际加载之前被触发。同样由于某种原因,如果我尝试将 for 循环放在 when( 通过语法错误声明它?
是否有人对我如何发出一堆 Ajax 请求并等到它们都完成后再触发事件有任何建议?或者去修复我目前拥有的东西?
提前感谢您的帮助。
【问题讨论】:
-
你也可以使用
if(condition.length < 10) { // code to execute }。
标签: javascript jquery ajax