【发布时间】:2016-08-31 01:05:36
【问题描述】:
像这样读取 JSON 服务:
$.ajax({
url:'activeIDs',
success : function(data){ // data = [14,15]
var tableRows = [];
for (var dataIndex=0; dataIndex < data.length; dataIndex++) {
var isLast = dataIndex == (data.length - 1);
$.ajax({
url: 'info?id=' + data[dataIndex],
success: function(data2) { // "foo", "bar"
tableRows.push(data2.name);
if (isLast) {
alert(tableRows.length);
}
}
});
}
}
});
第一个网络跟踪是:
- activeIDs =
[14,15] - info?id=14(需要 2 秒)=
"foo" - info?id=15(需要 4 秒)=
"bar"
在这种情况下,警报给出“2”。
Seconds network-trace 不同:
- activeIDs =
[14,15]; - info?id=14(需要 20 秒)=
"foo"(现在需要很长时间) - info?id=15(需要 1 秒)=
"bar"
在这种情况下,警报会在一秒钟后提供1,这是不好!!!
问题:
如何使用 $.Deferred 代替 isLast?
【问题讨论】:
-
我猜你不能保证最后一个请求会最后完成。
-
没错,只有
$.Deferred可能知道最后一个请求何时完成AFAIK。但是$.Deferred怎么用呢? -
我可以使用
if (data.length == entries.length) {,但我真的很喜欢使用$.Deferred的解决方案。 -
为什么需要多个ajax调用?
-
我已经根据 jQuery
when编辑了我的答案,因为 localStorage 是不可能的。 @PeterRader
标签: jquery ajax jquery-deferred