我在JQuery中有一个每个循环,我在其中触发ajax请求。在完成所有ajax调用后,我想显示一条成功消息。
我的代码如下,
$('.container input:checked').each(function() {
json_data = $(this).parent().parent().find('.case_json').html()
$.ajax({
type: "POST",
url: "/some_action",
data: { json_data : json_data },
success: function(data) {
console.log('saved')
}
})
}).promise().done( function(){ $('#import_message').show().addClass('alert alert-success').html('Data imported successfully!') } );
但代码的问题是我的成功消息是在执行ajax调用之前显示的方式。
我做错了什么?或者我是否需要改变实施方式?
答案 0 :(得分:0)
我认为你想建立一个承诺数组然后使用$ .when.apply。这里有一个类似的问题:What is cleanest way to turn Array of JQuery Promises into a JQuery Promise of an Array?。
答案 1 :(得分:0)
您需要将使用$ .map函数与$ .when结合使用,以下是它的外观:
$.when.apply($, $('.container input:checked').map(function() {
json_data = $(this).parent().parent().find('.case_json').html()
return $.ajax({
type: "POST",
url: "/some_action",
data: { json_data : json_data },
success: function(data) {
console.log('saved')
}
})
}))
.done( function(){
$('#import_message').show().addClass('alert alert-success').html('Data imported successfully!')
} );
Map函数会创建一个deffereds数组,这个数组被传递给$ .when函数,问题是它不支持数组作为参数,但支持任意数量的参数,所以我们可以使用.apply(),它接受promises数组并传递给函数作为参数。