Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/470.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 从ajax调用设置变量_Javascript_Ajax_Variables_Asynchronous - Fatal编程技术网

Javascript 从ajax调用设置变量

Javascript 从ajax调用设置变量,javascript,ajax,variables,asynchronous,Javascript,Ajax,Variables,Asynchronous,让我们开门见山吧。这就是我想要做的:我有一堆从服务器获取的用户数据。我希望缓存数据,以避免每次需要(比如)电子邮件或用户名时都向服务器发出请求 因此,我将构建一些函数,如getEmail、getUsername等,这些函数只进行一次Ajax调用并将其保存在一个对象中。如果再次调用该函数,它将返回缓存的对象 该应用程序分为多个模块。应用程序包含数据。这是小提琴: (打开控制台查看结果) 当然是这样做的: var email = Module.Utilities.getEmail(); 是错误的

让我们开门见山吧。这就是我想要做的:我有一堆从服务器获取的用户数据。我希望缓存数据,以避免每次需要(比如)电子邮件或用户名时都向服务器发出请求

因此,我将构建一些函数,如getEmail、getUsername等,这些函数只进行一次Ajax调用并将其保存在一个对象中。如果再次调用该函数,它将返回缓存的对象

该应用程序分为多个模块。应用程序包含数据。这是小提琴:

(打开控制台查看结果)

当然是这样做的:

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函数。可以在这里看到-->