Установка переменной из вызова ajax - PullRequest
0 голосов
/ 04 марта 2012

Давайте перейдем к сути. Это то, что я хочу сделать: у меня есть куча пользовательских данных, которые я получаю с сервера. Я хочу кэшировать данные, чтобы не отправлять запросы на сервер каждый раз, когда мне нужно, скажем, адрес электронной почты или имя пользователя.

Итак, я бы построил такие функции, как getEmail, getUsername и т. Д., Которые делают Ajax-вызов один раз и сохраняют его в объекте. Если функция вызывается снова, она возвращает кешированный объект.

Приложение разделено на модули. Приложение содержит данные. Вот скрипка: http://jsfiddle.net/Osoascam/Nk6aw/

(откройте консоль, чтобы увидеть результаты)

Конечно, делать что-то вроде этого:

var email = Module.Utilities.getEmail();

неверно, так как getEmail будет вызывать функцию Ajax, и, таким образом, электронная почта останется неопределенной даже после завершения вызова. (Я положил это в скрипку, чтобы показать, чего я пытаюсь достичь). Однако я не могу установить переменную внутри функции getEmail () или той, которая вызывает Ajax, так как несколько скриптов должны иметь возможность вызывать эту функцию и соответственно устанавливать свои переменные.

Какой лучший способ сделать это? Создание функций, которые получают часть объекта, возвращаемого вызовом Ajax, таким образом, что вызов выполняется только один раз ...

Заранее спасибо,

1019 * Óscar *

1 Ответ

1 голос
/ 04 марта 2012

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

Тем не менее, вы также можете посмотреть синхронный запрос AJAX ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...