jQuery - 完成多个ajax请求

时间:2016-09-20 08:27:20

标签: javascript jquery html ajax

$.each()我做了一个AJAX请求:

$.each(all, function(i,v) {                                 
    $.ajax({
        url: "/mycontroller/"+encodeURIComponent(v),
        success: function(data){ 
            $('#inner').append(data);
        }
    }); 
});

现在我想在$.each()中的每个AJAX请求完成时显示一条消息。但是我怎么能这样做,因为AJAX是异步的?

3 个答案:

答案 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")
    }
  });   });