0

JavaScript では、応答を変数で収集して出力しようとしています。変数 undefind を出力してから、応答を出力します。最初に servicedata =undefined を出力し、次にサーバーから取得した応答を出力します。

var data = get(requiredUrl);
console.log('servicedata ='+jsonstr);

応答を待っていないと思い、その下のステートメントを実行します。そのためには、スレッドを使用する必要があります。どうすればjavascriptでこれを行うことができますか?

function get(partenerUrl) {
    var xhr = new XMLHttpRequest();
    xhr.open('GET', partenerUrl, true);

    xhr.send(null);
    xhr.onreadystatechange = function() {
        console.log('in onreadystatechange:' + xhr.readyState + 'status'
                + xhr.status);

        if (xhr.readyState == 4 && xhr.status == 200) {
            var arrayOfObjects = eval(xhr.responseText);
            var jsonstr = JSON.stringify(arrayOfObjects)
            console.log('response>>' + jsonstr);
            return jsonstr;
        }
        return NETWORK_CONNECTION_NOT_FOUND;
    }

}
4

2 に答える 2

0

ここにはいくつか問題があります。変数jsonstrは関数内で宣言されてgetいるため、console.log('servicedata ='+jsonstr);呼び出しでもアクセスできません。

しかし、あなたが正しいので、それはとにかくうまくいきません。呼び出しは非同期であるため、行はすぐに実行されます。console.log関数の内部を呼び出す必要がありますget。あなたはすでに でやっていますconsole.log('response>>' + jsonstr);。それで、何が問題なのか本当にわかりませんか?

PS - これはスレッドとは関係ありません。

于 2012-04-04T14:33:14.980 に答える
0

2 つのこと、最初に行うこと

console.log('servicedata ='+jsonstr);

それ以外の

console.log('servicedata =' + data);

また、ここで(非同期として)jaxクエリを作成します

 xhr.open('GET', partenerUrl, true /* The `true` here mean asynchronous`*/);

したがって、スクリプトは xhr.onreadystatechange コールバックの続行を待機せず、get メソッドは何も送信しません。実際のデータを取得したい場合は、xhr.onreadystatechange コールバック内で取得するか、非同期パラメーターを false に設定する必要がありますが (これは悪い選択です)、最終的にアプリケーションが少しフリーズします。

于 2012-04-04T14:38:31.733 に答える