让我们谈谈这一点。这就是我想要做的:我从服务器获得了一堆userdata。我想缓存数据,以避免每次需要时向服务器发出请求,比如电子邮件或用户名。
因此,我将构建诸如getEmail,getUsername等函数,这些函数使Ajax调用一次并将其保存在对象中。如果再次调用该函数,它将返回缓存的对象。
该应用程序分为模块。应用程序包含数据。这是小提琴: http://jsfiddle.net/Osoascam/Nk6aw/
(打开控制台查看结果)
当然做这样的事情:
var email = Module.Utilities.getEmail();
是错误的,因为getEmail将调用Ajax函数,因此即使在调用完成后,电子邮件仍将保持未定义状态。 (我把它放在小提琴中以显示我想要实现的目标)。但是,我无法在getEmail()函数或调用Ajax的函数中设置变量,因为多个脚本必须能够调用该函数并相应地设置它们的变量。
最好的方法是什么?通过Ajax调用返回检索对象的一部分的函数,使调用只进行一次......
提前致谢,
奥斯卡
答案 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 ......