我将函数的返回值存储在变量中。该变量始终是未定义的。我不知道为什么,我希望新鲜的眼睛可以帮助我。
策略脚本代码
function getUserInfo(data){
var params = {type:'userinfo',data:data};
$.ajax({
url: DOMAIN_NAME + "get.php",
dataType: 'text',
type: 'post',
contentType: 'application/x-www-form-urlencoded',
data: params,
success: function( data, textStatus, jQxhr ){
var response = JSON.parse(data);
if (response.result == "success"){
console.log(response.data); //Correct Data
return response.data;
}else{
alert(response.data);
return false;
}
},
error: function( jqXhr, textStatus, errorThrown ){
alert("Something went wrong, try again later.");
return false;
}
});
}
此处,调用函数getUserInfo()
console.log(getUserInfo(window.localStorage.getItem("auth"))); //Undefined??
var userInfo = getUserInfo(window.localStorage.getItem("auth"));
console.log(userInfo); //Undefined??
如果与get.php返回的json相关,则类似
{"result":"success","data":"FOOBAR"}
答案 0 :(得分:0)
我相信这是因为JavaScript是异步的。您应该做的是返回一个Promise。这是我使用MySQL的项目中的代码示例。原理应该相同。
async function getUserInformation(id) {
let query = `SELECT full_name,description,link,htb FROM users WHERE discord_id = ${id}`;
return new Promise((resolve, reject) => {
pool.query(query, function (err, result) {
if (err) throw err;
resolve(result)
})
})
}
然后,要使用此功能的结果,请执行
getUserInformation(id).then((result)=>
// Do operations with result here
).catch(console.error)
从本质上讲,这个想法是返回一个可以解决或拒绝的承诺。兑现诺言后,您便可以使用从中得到的结果执行所需的任何操作。这就是JavaScript异步的烦恼。