Javascript 从ajax调用设置变量
让我们开门见山吧。这就是我想要做的:我有一堆从服务器获取的用户数据。我希望缓存数据,以避免每次需要(比如)电子邮件或用户名时都向服务器发出请求 因此,我将构建一些函数,如getEmail、getUsername等,这些函数只进行一次Ajax调用并将其保存在一个对象中。如果再次调用该函数,它将返回缓存的对象 该应用程序分为多个模块。应用程序包含数据。这是小提琴: (打开控制台查看结果) 当然是这样做的:Javascript 从ajax调用设置变量,javascript,ajax,variables,asynchronous,Javascript,Ajax,Variables,Asynchronous,让我们开门见山吧。这就是我想要做的:我有一堆从服务器获取的用户数据。我希望缓存数据,以避免每次需要(比如)电子邮件或用户名时都向服务器发出请求 因此,我将构建一些函数,如getEmail、getUsername等,这些函数只进行一次Ajax调用并将其保存在一个对象中。如果再次调用该函数,它将返回缓存的对象 该应用程序分为多个模块。应用程序包含数据。这是小提琴: (打开控制台查看结果) 当然是这样做的: var email = Module.Utilities.getEmail(); 是错误的
var email = Module.Utilities.getEmail();
是错误的,因为getEmail将调用Ajax函数,因此即使在调用完成后,电子邮件仍将保持未定义状态。(我把它放在小提琴上,以显示我正在努力实现的目标)。但是,我不能在getEmail()函数中设置变量,也不能在调用Ajax的函数中设置变量,因为一些脚本必须能够调用该函数并相应地设置它们的变量
最好的方法是什么?通过Ajax调用使检索对象一部分的函数返回一次调用
提前感谢,
Óscar默认情况下,Ajax请求是异步的。所以,
getEmail()
应该接受一个回调参数
Module.Utilities.getEmail = function(next) {
$.get('/api/getEmail/', function(res) {
next(res);
});
};
// when calling the function
Module.Utilities.getEmail(function(email) {
console.log(email);
});
也就是说,您还可以查看…谢谢!我在最后添加了一个回调来处理这个问题,并对getEmail和getAuthData进行了一些更改,还添加了一个新的setEmail函数。可以在这里看到-->