gpt4 book ai didi

javascript - 将 jquery get 请求数组传递给 $.when()

转载 作者:行者123 更新时间:2023-12-02 19:41:25 26 4
gpt4 key购买 nike

我有以下参数:

a = [{param:'a'}, {param:'b'}, {param:'c'}]

我想对每个参数发出一个 get 请求,如下所示:

a.map(function(ai){return $.get('myapi/get?ai='+ai.param)})

所有获取请求完成后我该如何做某事?

我尝试过使用 $.when,如下所示:

$.when(
a.map(function(ai){return $.get('myapi/get?ai='+ai)})
)
.done(function(results){
results.forEach(function(ri, i){
ri.success(function(result){
a[i].result = result
}
}
do_something_with(a)
}

不幸的是我显然误解了这个$.when().done()习语,如我打电话 do_something_with(a) 时我没有新的.result属性。我猜这是因为 when看到的是单个数组,因此直接进入 .done() ,而不是等待每个组件 get完成。

如有任何帮助,我们将不胜感激!

最佳答案

您需要:

$.when.apply($, myArray);

即使用Function.apply调用$.when()this === $其余参数是数组 myArray内容 ,其中该数组包含每次调用 $.get 返回的延迟对象.

<小时/>

要回答评论中的第二个问题,您可以通过此映射函数传递延迟对象数组,该函数返回一个新的延迟对象数组,该数组将在每次 AJAX 调用完成时解析,无论成功与否。

var alwaysDef = def.map(function(old) {
var def = $.Deferred();
old.always(def.resolve);
return def;
});

请注意,我不确定哪些参数(如果有)最终会传递给最终的 .done在此实例中起作用。

如果这很重要,延迟对象总是按顺序调用,因此您可以注册 .done每个原始 Promise 的处理程序将 AJAX 结果存储在数组中以供以后使用,以及 .fail存储 null 的处理程序值代替。

这将确保您的最终 .when在每个单独的结果可供您使用之前,不会调用处理程序。

关于javascript - 将 jquery get 请求数组传递给 $.when(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10357284/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com