我将函数的返回值存储在变量中。该变量始终未定义。我不知道为什么,我希望新鲜的眼睛可以帮助我。Strat 脚本代码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"}
1 回答
jeck猫
TA贡献1909条经验 获得超7个赞
我相信这是因为 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)
本质上,这个想法是返回一个 Promise,它可以解决或拒绝。一旦你的承诺得到解决,你就可以使用它的结果来执行你需要的任何操作。这就是 JavaScript 异步的烦恼。
添加回答
举报
0/150
提交
取消