0

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()ですか?

4

1 に答える 1

0

推奨されていませんが、同期リクエストを実行できます-Aは非同期用です...しかし、これを正しく実装するための一般的な考え方は次のとおりです。

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);
            }
        }
    }
}
于 2010-02-22T17:57:57.283 に答える