2010-02-22 4 views
0

XmlHttpRequest fonctionne via les rappels. Alors, comment puis-je retourner une valeur? J'ai essayé de définir une variable globale, mais cela ne semble pas fonctionner.Flux de contrôle avec XmlHttpRequest?

var response = null; // contains the most recent XmlHttpRequest response 

// loads the info for this username on the page 
function loadUsernameInfo(username) { 
    getUserInfo(username); 
    var profile = response; 
    if (profile) { 
     // do stuff 
    } 
    else { 
     indicateInvalidUsername(username); 
    } 
} 

getUserInfo() ne peut pas renvoyer un résultat, en raison du rappel:

function getUserInfo(username) { 
    var request = createRequest(); 
    request.onreadystatechange = userObjFromJSON; 
    var twitterURL = "http://twitter.com/users/show/" + escape(username) + ".json"; 
    var url = "url.php?url=" + twitterURL; 
    request.open("GET", url, true); 
    request.send(null); 
} 

Le rappel:

function userObjFromJSON() { 
    if (this.readyState == 4) { 
     alert(this.responseText); 
     response = this.responseText; 
    } 
} 

Comment puis-je obtenir la réponse au loadUsernameInfo()?

Répondre

0

Vous pouvez faire les requêtes synchrones, mais il n'est pas recommandé - A est pour Asynchronous ... Mais l'idée générale de mettre en œuvre ce serait bien être:

var response = null; // contains the most recent XmlHttpRequest response 

// loads the info for this username on the page 
function loadUsernameInfo(username) { 
    getUserInfo(username, onLoadUsernameComplete); 
} 

function getUserInfo(username, oncomplete) { 
    var request = createRequest(); 
    request.__username = username; 
    request.onreadystatechange = oncomplete; 
    var twitterURL = "http://twitter.com/users/show/" + escape(username) + ".json"; 
    var url = "url.php?url=" + twitterURL; 
    request.open("GET", url, true); 
    request.send(null); 
} 

function onLoadUsernameComplete(req) { 
    if (req.readyState == 4) { 
     // only if "OK" 
     if (req.status == 200) { 
      var profile = req.responseXML; 
      if (profile) { 
       // do stuff 
      } 
      else { 
       indicateInvalidUsername(req.__username); 
      } 
     } 
    } 
} 
+0

Vous aurez besoin d'une certaine façon de saisir la valeur de 'username' si vous allez l'utiliser dans' onLoadUsernameComplete' –