1

関数内で関数を呼び出し、この内部関数がオブジェクトを返すようにしたいと考えています。私は自分で作成した JSONRequest 関数を使用しているので、リクエストがロールの配列をフェッチすると想定してください。コードは次のとおりです。

(users = function(){

    this.getUserRoles = function(){

        var params = {};

        var json = new JSONRequest(function(data){

            rolesObj = data['roles'];

            return rolesObj;

        }, 'get_roles', params);

    }

});

次に、次を呼び出しますが、未定義を返します。

var cls = new users();

alert(cls.getUserRoles().length);
4

2 に答える 2

2

ajaxリクエストは非同期であるため、それらから戻り値を取得することはありません。ただし、完了時にコールバックを受け取るため、「return」値をコールバックに渡すことができます。

コールバックを使用するように書き直されたコードの例を次に示します。

this.getUserRoles = function(completionCallback){

    var params = {};

    var json = new JSONRequest(function(data){

        rolesObj = data['roles'];

        completionCallback(rolesObj);
        return rolesObj;

    }, 'get_roles', params);

}

そしてそれを使用します:

var cls = new users();
cls.getUserRoles(function(roles) {
    alert(roles.length);
});

JSONリクエストが完了すると、rolesObjがコールバック関数に渡されます。

于 2012-07-18T03:43:49.507 に答える
1

あなたのgetUserRoles関数は何も返しません。非同期の JSON リクエストを呼び出し、そのリクエストの成功のコールバックが何かを返します。

関数内で非同期リクエストを作成し、関数がリクエストから同期的に値を返すようにする方法はありません。リクエストには不明な時間がかかり、リクエストが送信されるとすぐにリクエスト元の関数が返されます。値はまだサーバーから返されていません。

于 2012-07-18T03:32:00.323 に答える