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 请求是异步的,因此您不会从它们那里获得返回值。但是,您确实会在它们完成时收到回调,以便您可以将“返回”值传递给回调。

下面是一个重写代码以使用回调的示例:

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 回答