0

私はおそらく単純なものが欠けていますが、このJSコードを考えると:

var WS = {
    whoami: function () {
        var toReturn;
        $.getJSON("/SecurityData/GetCurrentUser", function (data) {
            toReturn = data.Email;
        });

        return toReturn;
    }
}

私がそれを呼び出すとき、ブレークポイントをに置くとtoReturn = data.Email、期待されるデータはそこにありますが、そうでない場合WS.whoamiは未定義です。

これは$.getJSON呼び出しが非同期であるためだと思いますが、どうすれば目的の効果を得ることができますか?

4

2 に答える 2

1

Ajaxは非同期であり、promiseオブジェクトを返します。代わりに、promiseオブジェクトを返し、それにコールバックを追加します。

var WS = {
    whoami: function () {
        return $.getJSON("/SecurityData/GetCurrentUser");
    }
};

WS.whoami().done(function(data){
    alert(data.Email);
});

他の唯一のオプションは同期リクエストにすることですが、UXに影響を与えるため、お勧めしません。あなたは使用する必要が$.ajaxありますasync:false

于 2012-08-28T21:11:06.083 に答える
0

より良い解決策は、コールバックを使用して関数を呼び出すことです。このようにして、コードは非同期のままになり、json 呼び出しが完了すると続行されます。

var WS = {
    whoami: function (callback) {
        $.getJSON("/SecurityData/GetCurrentUser", callback);
    }
}

WS.whoami(function(data) {
    // code that uses var data 
});
于 2012-08-28T21:26:32.777 に答える