函数内的JavaScript函数 - 返回对象
问题描述:
我想调用一个函数内的函数,并让这个内函数返回一个对象。我正在使用我自己创建的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);
答
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请求的回调函数完成。
答
你getUserRoles
函数不返回任何东西。它调用一个异步JSON请求,并且该请求的成功回调返回一些内容。
没有办法在一个函数中产生一个异步请求,并让这个函数同步地从请求中返回一个值。该请求将花费未知的时间,并且请求发送后请求函数将立即返回。该值不会从服务器返回。
+0
嗯......那么使某些可重复功能模块化的最佳方式是什么?例如,我需要获取我的Web应用程序不同方面的角色列表,并以不同的方式使用它。我可能想要得到一个角色列表,并将它放在一个选择框中,或者获取该列表并将其放入一个div ... – Freddie 2012-07-18 03:39:15
谢谢!像一个魅力工作,现在我可以通过具有独特的回调函数定制如何处理数据。真棒。 – Freddie 2012-07-18 03:57:06