2

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

我有一个带有提要的“源”数组,我想要的是从每个源中获取数据。

我想过这样的事情:

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

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

如何使用 jQuery 在异步模式下执行“每个”?

4

1 回答 1

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 
    });
});
于 2012-10-24T22:50:48.990 回答