2010-02-22 2 views
0

XmlHttpRequest работает через обратные вызовы. Итак, как я могу вернуть значение? Я попытался установить глобальную переменную, но, похоже, она не работает.Контроль потока с помощью 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() не может возвращать результат, из-за обратного вызова:

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); 
} 

функции обратного вызова:

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

Как я могу получить ответ обратно loadUsernameInfo()?

ответ

0

Вы можете сделать синхронные запросы, хотя это не рекомендуется - А для асинхронных ... Но общая идея, чтобы правильно осуществить это будет:

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

Вам нужно каким-то образом, чтобы захватить значение 'username ', если вы собираетесь использовать его в' onLoadUsernameComplete' –