2010-01-22 120 views
0

我需要從2個XMLHttpRequests生成一個結果。 我該如何同時提出請求並等待它們完成?加入ajax結果?

我雖然過的類似...

resp1=""; 
req1.onreadystatechange=function(){if(this.readyState=4)resp1==this.responseText;} 
req2.onreadystatechangefunction(){if(this.readyState=4) finish(this.responseText);} 
function finish(resp2){ 
if (resp1=="") setTimeOut(finish(resp2),200); 
else { 
... both are done... 
} 

我沒有測試過,但是我認爲這是可行的。 有沒有更好的方法?我的代碼需要儘可能短而且快速。

回答

1

你不需要計時器。

您只需檢查每個回調是否已完成另一個回調,如果是,請致電finish

例如:

var resp1 = null, resp2 = null; 

req1.onreadystatechange = function() { 
    if (this.readyState === 4) { 
     resp1 = this.responseText; 
     if (resp2 !== null) finish(); 
    } 
}; 
req2.onreadystatechange = function() { 
    if (this.readyState === 4) { 
     resp2 = this.responseText; 
     if (resp1 !== null) finish(); 
    } 
}; 
+0

謝謝,你可以確認有對多線程的災難沒有可能性(被稱爲完成兩次)?我不確定js是否使用多線程。 – graw 2010-01-22 17:04:06

+0

Javascript不支持多線程,所以你不需要擔心它。 – SLaks 2010-01-22 17:08:08