我想要的是在异步模式下运行代码以获得更快的响应(多线程)。
我有一个带有提要的“源”数组,我想要的是从每个源中获取数据。
我想过这样的事情:
$.each(sources, function(key, val) {
JSON CALL OF EACH SOURCE
}
然后将所有结果分组到一个数组中并显示它们。问题是我希望 json 调用处于异步模式,因为其中一些调用需要一些时间。
如何使用 jQuery 在异步模式下执行“每个”?
我想要的是在异步模式下运行代码以获得更快的响应(多线程)。
我有一个带有提要的“源”数组,我想要的是从每个源中获取数据。
我想过这样的事情:
$.each(sources, function(key, val) {
JSON CALL OF EACH SOURCE
}
然后将所有结果分组到一个数组中并显示它们。问题是我希望 json 调用处于异步模式,因为其中一些调用需要一些时间。
如何使用 jQuery 在异步模式下执行“每个”?
使用延迟对象:
// 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
});
});