如何从封闭的 js 函数中返回值? 我尝试了下一个示例,但它不起作用(它返回我:
function executeCommand(data, func){
$.ajax({
type: 'POST',
url: SERVERPATH+'Commands/',
data: data,
success: func,
dataType: 'json'
});
}
function executeServiceOperation(data){
var result = null;
executeCommand(data,
result = (function(data,status){
if( status=='success' ){
return data.result;
}
else return null;
})(data,status)
);
return result;
}
result
每次都是 null。我认为这是因为状态
而发生的。如何获取 status
变量?谢谢。
最佳答案
根据您的代码,您必须在第二个参数中传递一个函数,但您将返回一个赋值(相当于“true”)。它会失败。
相反,做这样的事情:
executeCommand(data, function(data,status){ //function as second parameter
if( status=='success' ){
return data.result;
} else {
return null;
}
});
但是,它仍然是错误的。任何涉及 AJAX 的事情都是异步的。因此你不能从中“返回”任何东西。您应该做的是当“成功”发生时传递回调。
function executeServiceOperation(data, callbacks){
//do some set-up stuff you want
executeCommand(data,function(data,status){
if( status === 'success'){
callbacks.success(data.result) //execute callback with result
} else {
callbacks.fail(null); //execute fail callback, with null if necessary
}
});
);
executeServiceOperation(data, {
success :function(result){
//do something with result
},
fail : function(){
//do something as if it returned null
}
});
上面的代码是用传统的回调方式编写的。你应该看看Deferred Objects对于“糖”代码。
关于javascript - ajax中js封装函数的返回值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10458756/