从ajax调用设置变量

时间:2012-03-04 04:51:54

标签: javascript ajax variables asynchronous

让我们谈谈这一点。这就是我想要做的:我从服务器获得了一堆userdata。我想缓存数据,以避免每次需要时向服务器发出请求,比如电子邮件或用户名。

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

该应用程序分为模块。应用程序包含数据。这是小提琴: http://jsfiddle.net/Osoascam/Nk6aw/

(打开控制台查看结果)

当然做这样的事情:

var email = Module.Utilities.getEmail();

是错误的,因为getEmail将调用Ajax函数,因此即使在调用完成后,电子邮件仍将保持未定义状态。 (我把它放在小提琴中以显示我想要实现的目标)。但是,我无法在getEmail()函数或调用Ajax的函数中设置变量,因为多个脚本必须能够调用该函数并相应地设置它们的变量。

最好的方法是什么?通过Ajax调用返回检索对象的一部分的函数,使调用只进行一次......

提前致谢,

奥斯卡

1 个答案:

答案 0 :(得分:1)

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);
});

那就是说,你也可以调查synchronous ajax request ......