【问题标题】:JavaScript function within a function - returning an object函数内的 JavaScript 函数 - 返回一个对象
【发布时间】:2012-07-17 01:06:31
【问题描述】:

我想在一个函数中调用一个函数并让这个内部函数返回一个对象。我正在使用我自己创建的 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);

【问题讨论】:

    标签: javascript object return


    【解决方案1】:

    您的getUserRoles 函数不返回任何内容。它调用一个异步 JSON 请求,该请求的成功回调会返回一些内容。

    无法在函数中发出异步请求并让函数从请求中同步返回值。请求将花费未知的时间,请求函数将在请求发送后立即返回。该值尚未从服务器返回。

    【讨论】:

    • hmm...那么使某些可重复功能模块化的最佳方法是什么?例如,我需要获取一个跨 Web 应用程序不同方面的角色列表,并以不同的方式使用它。我可能想要获取角色列表并将其放入选择框中,或者获取该列表并将其放入 div...
    【解决方案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 就会被传递到回调函数中。

    【讨论】:

    • 谢谢!工作就像一个魅力,现在我可以通过拥有独特的回调函数来自定义如何处理数据。太棒了。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-12-05
    • 1970-01-01
    • 2021-07-07
    • 1970-01-01
    • 2012-03-30
    • 1970-01-01
    相关资源
    最近更新 更多