2010-01-22 4 views
0

Je dois générer un résultat à partir de 2 XMLHttpRequests. Comment puis-je effectuer les demandes simultanément et attendre qu'elles se terminent?Rejoindre les résultats ajax?

J'ai bien de quelque chose comme ...

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... 
} 

Je ne l'ai pas encore testé mais je suppose que cela fonctionnerait. Y a-t-il un meilleur moyen? Mon code doit être aussi court et rapide que possible.

Répondre

1

Vous n'avez pas besoin de minuterie pour cela.

Tout ce que vous devez faire est de vérifier chaque rappel si l'autre a terminé, et, si oui, appelez finish.

Par exemple:

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

Merci, pouvez-vous confirmer qu'il n'y a pas de possibilités de multithreading catastrophe (finition appelée deux fois)? Je ne suis pas sûr si js utilise plusieurs threads pour cela ou pas. – graw

+0

Javascript ne supporte pas le multi-threading, vous n'avez donc pas besoin de vous en préoccuper. – SLaks