2011-07-16 53 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'); 
}; 
相關問題