Javascript函数未在AngularApp中返回值
首先,对不起,我英语不好。 这个例子中的问题是一个函数:“refresh”,查询响应并返回mysql中数据库中的值,但是当我尝试获取响应并返回到另一个函数时,会显示一个“未定义”的值。。代码如下:Javascript函数未在AngularApp中返回值,javascript,mysql,angularjs,node.js,express,Javascript,Mysql,Angularjs,Node.js,Express,首先,对不起,我英语不好。 这个例子中的问题是一个函数:“refresh”,查询响应并返回mysql中数据库中的值,但是当我尝试获取响应并返回到另一个函数时,会显示一个“未定义”的值。。代码如下: function refresh(query){ var res; $http.get('/quaestioJS/'+query). success(function(data, status, headers, config) { console.log(da
function refresh(query){
var res;
$http.get('/quaestioJS/'+query).
success(function(data, status, headers, config) {
console.log(data); //HERE, THE INFO IS SHOWING CORRECTLY
res = data; //HERE 'res' IS NOT GRABBING THE VALUE OF 'data'
}).
error(function(data, status, headers, config) {
console.log("Error.");
console.log(data);
});
console.log(res);
return res;
}
更新V1.0
更新代码:
function refresh(query){
$http.get('/quaestioJS/'+query).
success(function(data, status, headers, config) {
return data;
}).
error(function(data, status, headers, config) {
console.log("Error.");
console.log(data);
});
}
这里显示的是代码中的变量和函数。。。响应是相同的:未定义
function find(tabla){
var x = refresh("SELECT * FROM "+tabla);
console.log(x);
$scope.limpiar();
}
原因是$http.get是异步工作的。因此,您正确设置了res变量,但当您在控制台上记录res时,它发生在返回数据之前。因此,正确的修改是:
function refresh(query, callback){
var res;
$http.get('/quaestioJS/'+query).
success(function(data, status, headers, config) {
console.log(data);
res = data;
callback(res);
}).
error(function(data, status, headers, config) {
console.log("Error.");
console.log(data);
});
}
function find(tabla){
var x = refresh("SELECT * FROM "+tabla, function(data){
console.log(data);
$scope.limpiar();
});
}
编辑:很抱歉,我的第一次尝试是一个错误,完全忘记了return只能从success函数中返回。这就是
回调的概念出现的时候。为了获取响应,您必须传递一个函数/回调/响应处理程序,该处理程序将为您提供操纵响应的控件
当前实现中未定义的原因是,调用的函数的执行在HTTP调用响应出现之前完成。在这种情况下,返回的值将是未定义的。
因此,您可以通过传递响应处理程序来获取响应,如下所示:
function find(tabla){
refresh("SELECT * FROM "+tabla, function(data, status, headers, config) {
console.log(data);
$scope.limpiar();
});
}
function refresh(query, handler) {
$http.get('/quaestioJS/'+query).
success(handler).
error(function(data, status, headers, config) {
console.log("Error.");
console.log(data);
});
}
是的,但真正的问题是函数没有返回'data'或'res',主响应在那里,但是返回“notworking”,我的控制台显示“undefined”。。在最初的代码中,返回在函数的末尾,因为在另一篇文章中说,不能将返回放在可调用函数中,但可以从可调用函数中获取值并在函数的末尾返回D:因为返回是退出回调函数而不是外部函数。。。可以这么说。选中此项,将更新我的:很好,但同样的,如果我尝试从处理程序获取响应并返回数据,则始终是“未定义”。。。我想我将使用$scope变量来查看数据。您不应该从处理程序返回数据。您应该从处理程序执行所有操作,或者从处理程序调用执行这些操作的函数。这就是我在响应处理程序中移动$scope.limpiar()的原因