2011-07-16 54 views
5

我在代码中用jQuery和get做了几个请求。它看起来像:如何在所有ajax请求完成后调用alert?

$.get('address1', function() { ... }); 
$.get('address2', function() { ... }); 
$.get('address3', function() { ... }); 

// This code should be runned when all 3 requests are finished 
alert('Finished'); 

那么,还有检测是否还有处理请求和运行,只有当所有3个请求完成后标记代码的任何方式。

谢谢。

回答

13

您可以使用deferred objects[docs]在jQuery的1.5介绍:

$.when(
    $.get('address1', function() { ... }), 
    $.get('address2', function() { ... }), 
    $.get('address3', function() { ... }) 
).then(function() { 
    alert('Finished'); 
}); 

参考:jQuery.when

jQuery的学习中心有一个很好的introduction to deferred objects/promises

+0

如果'get'的调用在分割函数中?我可以做些什么,如:$ .when(function(){doRequest1(); doRequest2(); doRequest3();})。then(function(){...});'? – Ockonal

+1

@Ockonal:只需返回'$ .get'返回的promise对象:'function(){return $ .get(...)}'。然后你可以执行'$ .when(doRequest1(),doRequest2(),doRequest3())...'。看看文档和示例,延期对象可能会非常棘手,但它们非常强大。 –

0
var fin1 = false; 
var fin2 = false; 
var fin3 = false; 

$.ajax({ 
    url: "address1", 
    success: function(){ 
    fin1 = true; 
    fnUpdate(); 
    } 
}); 

$.ajax({ 
    url: "address2", 
    success: function(){ 
    fin2 = true; 
    fnUpdate(); 
    } 
}); 

$.ajax({ 
    url: "address3", 
    success: function(){ 
    fin3 = true; 
    fnUpdate(); 
    } 
}); 

function fnUpdate(){ 
    if(fin1 && fin2 && fin3){ 
    alert('fin'); 
    } 
} 
+0

如果什么请求有错误?然后在技术上所有三个“完成”,但没有看到警报。 – rvighne

+0

当然,您可以添加错误回调,然后您可以执行自己的业务逻辑来处理它。 – ysrb

0
var count = 0; 
$.get('address1', function() { count++; ... }); 
$.get('address2', function() { count++; ... }); 
$.get('address3', function() { count++; ... }); 

var int = setInterval(function() { 
    if (count === 3) { 
     clearInterval(int); 
     alert('done'); 
    } 
}, 10); 
2
var isFinished = []; 

$.get('address1', function() { isFinshed.push["address1"]; allDone(); }); 
$.get('address2', function() { isFinshed.push["address2"]; allDone(); }); 
$.get('address3', function() { isFinshed.push["address3"]; allDone();}); 

var allDone = function(){ 
    if(isFinished.length < 3)return 

    alert('Finished'); 
}; 
相关问题