0

変数結果内に関数式を使用するプロパティに JS オブジェクトがあります。

結果変数にデータを入力し、processData が呼び出されたときにそれを返す必要があります。

ここで私が間違っていることを教えてください。問題を簡単に説明し、良い点を追加していただければ幸いです。

$(document).ready(function () {

    // General Settings
    var 
    ApiSettings = {
        clientId: 'aaa',
        clientSecret: 'bbb'
    }

    ApiSettings.uriGetToken = 'https://ccc.com/oauth/token?grant_type=client_credentials&client_id=' + encodeURIComponent(ApiSettings.clientId) + '&client_secret=' + encodeURIComponent(ApiSettings.clientSecret);

    ApiSettings.token = (function () {
        var result; // I'm not able to set this variable
        // Make an Ajax Request
        $.getJSON(ApiSettings.uriGetToken, processData);
        function processData(data) {
            result = data.access_token;
        }
        return result;
    })();

    console.log(ApiSettings);
    console.log(ApiSettings.uriGetToken);
    console.log('FINAL:' + ApiSettings.token);
});
4

1 に答える 1

3

実際には、コードで結果変数を設定できます。問題は.getJSON()、非同期メソッドであるを使用することです。Ajax リクエストを発射すると、サーバーが応答する前に、JavaScript が直接 return メソッドに進み、結果を返します。したがって、結果を更新する前に関数から戻っています。

非同期メソッドは、特に初心者の場合、最初は把握するのが少し難しい場合があります。あなたがしなければならないことは、値を読み取るために使用するのと同じ方法で値をフェッチしないように、コードを再構築することです。

もう 1 つのオプションは、代わりに同期 Ajax リクエストを使用して、結果を返す前にサーバーが応答するまで JavaScript を強制的に待機させることです。ただし、サーバーが戻るまで UI が応答しないため、これが良い考えになることはめったにありません。

于 2012-11-09T11:57:40.170 に答える