我想在函数中调用一个函数,让这个内部函数返回一个对象。我正在使用我自己创建的JSONRequest函数,所以假设请求获取了一组角色。这是代码:
(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);
答案 0 :(得分: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就会传递给回调函数。
答案 1 :(得分:1)
您的getUserRoles
函数不会返回任何内容。它调用异步JSON请求,该请求的成功回调返回一些内容。
无法在函数中生成异步请求,并使该函数同步返回请求中的值。请求将花费未知的时间,请求函数将在请求发送后立即返回。该值尚未从服务器返回。