jQuery中的async foreach

时间:2012-10-24 22:46:20

标签: jquery asynchronous foreach

我想要的是在异步模式下运行代码以获得更快的响应(多线程)。

我有一个像“来源”这样的数组和Feed,我想要的是从每个数据中获取数据。

我想过这样的事情:

$.each(sources, function(key, val) {
    JSON CALL OF EACH SOURCE
}

然后将所有结果分组并显示它们。问题是我希望json调用处于异步模式,因为它们中的一些需要一些时间。

如何使用jQuery在异步模式下执行'each'?

1 个答案:

答案 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 
    });
});