Mit*_*ell 4 ajax jquery asynchronous synchronous getjson
我有一种情况需要进行几次getJSON调用,并且一旦返回所有数据就调用另一个函数,就像这样(例如简化代码):
var data = {};
for (var i in a) {
$.getJSON(base_url+i, function(d) {
data[i] = d;
});
}
do_something(data);
Run Code Online (Sandbox Code Playgroud)
显然这不起作用,因为我在getJSON调用返回任何数据之前调用do_something.
我目前解决此问题的方法是同步进行调用,如下所示:
var data = {};
$.ajaxSetup({'async':false});
for (var i in funcs) {
$.getJSON(base_url+i, function(d) {
data[i] = d;
});
}
$.ajaxSetup({'async':true});
do_something(data);
Run Code Online (Sandbox Code Playgroud)
我的问题是,有更好的方法可以做到这一点,还是我最好同步进行如上所述的呼叫?
根据Felix Kling发布的类似问题的链接,答案是使用延迟对象.
然而,由于i在getJSON成功功能中的使用,存在进一步的复杂化.这将始终是最后一次迭代的值.有关更多详细信息,请参阅我的其他问题:
jQuery Deferred - 延迟getJSON成功函数中的变量范围
完整解决方案
var data = {};
var calls = [];
for (var i in funcs) {
calls.push(
$.getJSON(base_url+i,
(function(i) {
return function(d) {
data[i] = d;
};
}(i))
)
);
}
$.when.apply($,calls).then(function() {
do_something(data);
});
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4312 次 |
| 最近记录: |