我有一个动态的输入框列表。单击按钮时,每个行项目都将发送到服务器进行处理并保存到db。当所有请求都返回时,进程应该调用"完成"。
我在网上的各种例子中都有这个:
var promises=[];
$("input").each(function(){
$(promises).push(
$.get("processRequest?value="+$(this).val(),
function(){
$("div ##div_"+i).html("done with input " + i);
}
);
}
);
$.when.apply(promises).done(function() {
alert('done!');
}
但是当第一次获得返回时,触发完成。当警报弹出窗口显示时,我仍然可以看到仍有一些请求尚未返回。
我在这里缺少什么?
答案 0 :(得分:1)
您正在推送.each
结果,而不是承诺。 $。当等待承诺的数组中的每个承诺。你的情况是倒退的,试试:
$("input").each(function(){
promises.push($.get("processRequest?value="+this.value,
function(){
$("div ##div_"+i).html("done with input " + i);
}
)
});
或者:
var promises = $("input").map(function(e){
return $.get("processRequest?value="+e.value,...);
}).get();
作为旁注,带有增量数字ID的div通常表示代码设计问题。