所以这在最初的问题之后很久了,从技术上讲,它并不是问题所要求的如何使用 Ajax 调用来填充外部变量的直接答案。然而,在研究和响应中,如果不禁用调用中的异步函数,或者通过下降到看似潜在的回调地狱,要做到这一点是非常困难的。我的解决方案是使用Axios。使用它极大地简化了我使用异步调用获取数据的方式。
例如,如果我试图通过来自 JS 的调用访问 PHP 中的会话变量,例如用户 ID,这可能是一个问题。做这样的事情..
async function getSession() {
'use strict';
const getSession = await axios("http:" + url + "auth/" + "getSession");
log(getSession.data);//test
return getSession.data;
}
它调用了一个看起来像这样的 PHP 函数。
public function getSession() {
$session = new SessionController();
$session->Session();
$sessionObj = new \stdClass();
$sessionObj->user_id = $_SESSION["user_id"];
echo json_encode($sessionObj);
}
要使用 Axios 调用它,请执行以下操作。
getSession().then(function (res) {
log(res);//test
anyVariable = res;
anyFunction(res);//set any variable or populate another function waiting for the data
});
结果将是,在这种情况下,来自 PHP 的 Json 对象。
{"user_id":"1111111-1111-1111-1111-111111111111"}
您可以直接在 Axios 调用的响应部分中的函数中使用它,也可以设置变量或调用另一个函数。
Axios 调用的正确语法实际上如下所示。
getSession().then(function (res) {
log(res);//test
anyVariable = res;
anyFunction(res);//set any variable or populate another function waiting for the data
}).catch(function (error) {
console.log(error);
});
用于正确的错误处理。
我希望这可以帮助任何遇到这些问题的人。是的,我知道从技术上讲这不是问题的直接答案,但鉴于已经提供的答案,我觉得有必要提供这种替代解决方案,它极大地简化了我在客户端和服务器端的代码。