2012-07-18 26 views
1

我想调用一个函数内的函数,并让这个内函数返回一个对象。我正在使用我自己创建的JSONRequest函数,只是假设请求获取了一个角色数组。下面是代码:函数内的JavaScript函数 - 返回对象

(users = function(){ 

    this.getUserRoles = function(){ 

     var params = {}; 

     var json = new JSONRequest(function(data){ 

      rolesObj = data['roles']; 

      return rolesObj; 

     }, 'get_roles', params); 

    } 

}); 

然后我打电话以下,但它返回undefined:

var cls = new users(); 

alert(cls.getUserRoles().length); 

回答

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); 
}); 

的rolesObj传递到一旦JSON请求的回调函数完成。

+0

谢谢!像一个魅力工作,现在我可以通过具有独特的回调函数定制如何处理数据。真棒。 – Freddie 2012-07-18 03:57:06

1

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

没有办法在一个函数中产生一个异步请求,并让这个函数同步地从请求中返回一个值。该请求将花费未知的时间,并且请求发送后请求函数将立即返回。该值不会从服务器返回。

+0

嗯......那么使某些可重复功能模块化的最佳方式是什么?例如,我需要获取我的Web应用程序不同方面的角色列表,并以不同的方式使用它。我可能想要得到一个角色列表,并将它放在一个选择框中,或者获取该列表并将其放入一个div ... – Freddie 2012-07-18 03:39:15