我有一个功能,可以根据输入的用户ID从数据库中查找用户的名称。但是我在返回名字方面面临困难。
function getName(userID){
var user = { "username" : userID};
var name;
$.get("/getName",user,function(data,status){
console.log(data); //prints correct result
return data; //but returns undefined
});
}
返回的值始终是不确定的。调用函数如下所示:
function init(){
myid = "james123";
myname = getName(myid);
console.log(myname); //always prints undefined
}
如果我尝试将从数据库接收的数据保存在一个变量中,然后再返回,例如:
function getName(userID){
var user = { "username" : userID};
var name;
$.get("/getName",user,function(data,status){
console.log(data);
name = data;
});
return name;
}
这也不起作用,我知道是异步的。有什么办法可以使返回工作正常吗?
答案 0 :(得分:1)
$。get是异步执行的,因此需要回调。您可以这样做:
function getName(userID, callback){
var user = { "username" : userID};
var name;
$.get("/getName",user,function(data,status){
console.log(data); //prints correct result
callback(data); //but returns undefined
});
}
然后:
function init(){
myid = "james123";
getName(myid, function(myname){
console.log(myname);
});
}
或者通过Promises,您可以:
function getName(userID){
var user = { "username" : userID};
var name;
return new Promise(function(resolve, reject) {
$.get("/getName",user,function(data,status){
resolve(data); //prints correct result
});
}
}
然后:
function init(){
myid = "james123";
getName(myid).then((myname)=>console.log(myname);
}
并带有异步:
async function init(){
myid = "james123";
myname = await getName(myid);
console.log(myname);
}
答案 1 :(得分:0)
您可以使用较低级别的ajax方法,因为与较高级别的get
相比,它可以自定义更多呼叫设置
其中一项设置可让您禁用异步调用,即强制代码停止并等待获取完成,然后再继续执行async: false
,其用法如下:
function getName(userId) {
var user = { "username" : userID};
var name;
$.ajax({
url: "/getName",
data: user,
type: "GET",
async: false,
success: function (data) {
name = data;
},
});
return name;
}