【问题标题】:asyn foreach in jQueryjQuery中的异步foreach
【发布时间】:2012-10-15 01:41:48
【问题描述】:

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

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

我想过这样的事情:

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

然后将所有结果分组到一个数组中并显示出来。问题是我想要异步模式下的 json 调用,因为它们中的一些需要一些时间。

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

【问题讨论】:

标签: jquery asynchronous foreach


【解决方案1】:

使用延迟对象:

// 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 
    });
});

【讨论】:

  • 这样做:$.when.apply($, defs).done(function(data) { console.log(data); 我得到这样的东西: [ Array[88] , "success ", Object ] 数据在那个数组 [88] 中,但是我怎么能访问它呢?很抱歉,但我正在为此苦苦挣扎,答案一定很简单
  • @themazz 对于每个 AJAX 调用,您都会得到一个这样的条目 - 使用 arguments 伪数组(根据代码)来访问它们。啊,我明白了,每个元素也包含 AJAX textStatusjqXHR 结果。所以要访问第n组数据,使用arguments[n][0]
  • @themazz 有一种方法可以简化这个 - 我会编辑答案
  • 谢谢,您的解决方案让我的系统得到了显着的改进!
  • @themazz 很高兴能帮上忙 :)
猜你喜欢
  • 2012-06-16
  • 2018-06-18
  • 2022-01-12
  • 1970-01-01
  • 2019-04-20
  • 2016-08-17
  • 2021-04-08
  • 1970-01-01
  • 2014-03-12
相关资源
最近更新 更多