1

Есть такой код.

var model = {
    getConfig: function(){
        that = this;
        $.getJSON("latestProjects.json" , function(projects){
                    that.property = projects.length;
            });
        alert("model.property = " + that.property);
    }
}
model.getConfig();

и файл latestProjects.json в корневой папке

{"length":6, "name": "Joe"}

Дело в том что я хочу получить обьект json и записать его в свойство модели (model.property)// хочу чтобы было model.property.length // = 6 и т.д. Но по не понятной мне причине всё что происходит внутри функции getJSON, выполняется в последнюю очередь, отсюда итог - переменная(свойство) остается undefined до конца выполнения скрипта. Если прописать console.log(model.property) прямо в консоли браузера ( после выполнения скрипта ), то результат будет = 6;

Как решить данную проблему? Хочу именно сохранить обект из JSON в переменную, чтобы иметь доступ к ней во время работы пользователя со страницей браузера. (не хочу каждый раз когда нужно достать данные из статичного json файла, грузить его методом getJSON, да и отделить данные от операций над ними было бы неплохо). Буду рад дельному совету.

IntensNow
  • 111
  • Это же асинхронный запрос. Никто не будет ждать ответа, а сразу продолжится выполнение функции. Решение - Promise. Скоро и async/await. Подробнее см. дубликат предложенный дубликат. –  Oct 17 '16 at 04:23

1 Answers1

1

Я плохо знаю js но так должно сработать

model.property = projects

Naumov
  • 3,854
  • это всего лишь упрощенный и менее гибкий способ присвоения. – IntensNow Oct 16 '16 at 21:31
  • тем не менее в контексте данной проблемы по сути это тоже самое и проблемы не решает. – IntensNow Oct 16 '16 at 21:31