Javascript 将jquery get请求数组传递到$.when()中
我有以下参数:Javascript 将jquery get请求数组传递到$.when()中,javascript,jquery,Javascript,Jquery,我有以下参数: a = [{param:'a'}, {param:'b'}, {param:'c'}] 我想对每个参数发出get请求,如下所示: a.map(function(ai){return $.get('myapi/get?ai='+ai.param)}) $.when( a.map(function(ai){return $.get('myapi/get?ai='+ai)}) ) .done(function(results){ results.forEach(fu
a = [{param:'a'}, {param:'b'}, {param:'c'}]
我想对每个参数发出get请求,如下所示:
a.map(function(ai){return $.get('myapi/get?ai='+ai.param)})
$.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)
}
一旦所有get请求完成,我该如何做
我尝试过使用$。当,像这样:
a.map(function(ai){return $.get('myapi/get?ai='+ai.param)})
$.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()
习惯用法,就像我用(a)调用做某事一样,我没有新的.result
属性。我猜这是因为当
看到单个数组时,直接进入.done()
,而不是等待每个组件获取
完成
任何帮助都将不胜感激 您需要:
$.when.apply($, myArray);
i、 e.使用函数。应用
调用$.when()
,使用this===$
,其余参数是数组myArray
的内容,其中该数组包含每次调用$返回的延迟对象。get
要回答评论中的第二个问题,您可以通过这个map函数传递延迟对象数组,该函数返回一个新的延迟对象数组,该数组将在每次AJAX调用完成时解析,无论调用是否成功
var alwaysDef = def.map(function(old) {
var def = $.Deferred();
old.always(def.resolve);
return def;
});
请注意,在本例中,我不确定哪些参数(如果有)最终会传递给最终的.done
函数
如果这很重要,那么延迟对象总是按顺序调用的,因此您可以为每个原始承诺注册一个.done
处理程序,该处理程序将AJAX结果存储在一个数组中供以后使用,并注册一个.fail
处理程序,该处理程序将存储一个null
值
这将确保最终的
。when
处理程序在每个单独的结果对您可用之前不会被调用。太快了!在中处理.done()?@mikedevar中的响应时,我使用了相同的技巧.done()
您需要使用参数
伪数组来检索响应数据-每个AJAX调用一个响应数据。使用done回调中的console.log(参数)查看参数包含什么。它应该是一个对象数组或数组。有没有一种方法不介意一个或多个承诺失败?似乎。完成和。然后都对失败非常敏感response@MikeDewar是-您必须为您的每个请求创建一个新的延迟的。始终()
.resolve()
,然后只执行。
这些延迟的对象都是.done
;-)成功应该是什么ri
是AJAX调用返回的结果(或者如果没有代码中的其他错误,则返回的结果),而不是延迟的/jqXHR
对象。