我想要的是在异步模式下运行代码以获得更快的响应(多线程)。
我有一个像“来源”这样的数组和Feed,我想要的是从每个数据中获取数据。
我想过这样的事情:
$.each(sources, function(key, val) {
JSON CALL OF EACH SOURCE
}
然后将所有结果分组并显示它们。问题是我希望json调用处于异步模式,因为它们中的一些需要一些时间。
如何使用jQuery在异步模式下执行'each'?
答案 0 :(得分:3)
使用延迟对象:
// get an array of jqXHR objects - the AJAX calls will
// run in parallel, subject to browser limits on the number
// of concurrent connections to each host
var defs = $.map(sources, function() {
return $.ajax({ url: this });
});
// when they're all done, invoke this callback
$.when.apply($, defs).done(function() {
// "arguments" array will contain the result of each AJAX call
...
});
要更改AJAX函数以便仅返回data
参数,可以使用.pipe()
:
var defs = $.map(sources, function() {
return $.ajax({ url: this }).pipe(function(data, text, jqxhr) {
return data; // filtered result
});
});