今天在写js函数时,调用了一个自己写的带返回值的js函数,但是得到的返回值actor却是undefined
var actor = getActorAjax(datas[i].actorId);
于是到getActorAjax()这个函数中寻找错误
//获取演员信息
function getActorAjax(id){
var res = {
"id": id,
};
var actor;
$.ajax({
headers: {
"x-auth-token" : "" + localStorage.getItem("x-auth-token") //这是获取的token
},
type:"post",
url:getActorUrl,
data:JSON.stringify(res),
dataType :"json",
contentType:"application/json;charset=utf-8",
success:function(obj){
console.log(res);
console.log(obj.code + obj.msg);
if (obj.code != 0) {
alert(obj.msg);
}else{
actor = obj.data.actor;
}
},
error: function(){
alert('访问失败');
}
});
return actor;
}
这个函数中使用了Ajax得到了actor,并在最后进行返回。一开始我觉得是后台接口出错,没有返回actor。于是查看了接口的返回
显然,ajax的访问是成功的,却是得到了actor,那为什么函数不能正常返回呢?
上网查证后,发现问题出在ajax的访问上, ajax默认是异步调用,才会导致这种情况。只需要设置为同步调用,加上下面这行代码即可。
async:false,//同步
//获取演员信息
function getActorAjax(id){
var res = {
"id": id,
};
var actor;
$.ajax({
headers: {
"x-auth-token" : "" + localStorage.getItem("x-auth-token") //这是获取的token
},
type:"post",
url:getActorUrl,
async:false,//同步
data:JSON.stringify(res),
dataType :"json",
contentType:"application/json;charset=utf-8",
success:function(obj){
console.log(res);
console.log(obj.code + obj.msg);
if (obj.code != 0) {
alert(obj.msg);
}else{
actor = obj.data.actor;
}
},
error: function(){
alert('访问失败');
}
});
return actor;
}
如上,此时函数就能正确返回了。