在$.each()
我做了一个AJAX请求:
$.each(all, function(i,v) {
$.ajax({
url: "/mycontroller/"+encodeURIComponent(v),
success: function(data){
$('#inner').append(data);
}
});
});
现在我想在$.each()
中的每个AJAX请求完成时显示一条消息。但是我怎么能这样做,因为AJAX是异步的?
答案 0 :(得分:4)
您可以使用jQuery.when()
。这个方法
提供了一种基于零个或多个对象执行回调函数的方法,通常是表示异步事件的Deferred对象。
var ajaxRequests = all.map(function(x) {
return $.ajax({
url: "/mycontroller/"+encodeURIComponent(x),
success: function(data){
$('#inner').append(data);
}
});
jQuery.when.apply(this, ajaxRequests).then(function() {
// do what you want
});
答案 1 :(得分:1)
使用简单的javascript,您可以通过以下方式完成:
var counter = 0;
$.each(all, function(i,v) {
$.ajax({
url: "/mycontroller/"+encodeURIComponent(v),
success: function(data){
$('#inner').append(data);
counter++; //increment the counter
},
error: function(){
counter++; //increment the counter
},
complete : function(){
//check whether all requests been processed or not
if(counter == all.length)
{
alert("All request processed");
}
}
});
});
答案 2 :(得分:1)
使用async:false使浏览器传递给其他代码之前完成ajax请求
$.each(all, function(i,v) {
$.ajax({
type: 'POST',
url: "/mycontroller/"+encodeURIComponent(v),
data: row,
success: function(data){
$('#inner').append(data);
}
error: function() {
console.log("Error")
}
}); });