Доступ к данным внешнего файла JSON за пределами $ .getJSON - PullRequest
0 голосов
/ 29 марта 2020

Мне нужно преобразовать 2-символьный код страны в более длинное имя, и я думаю, что имеет смысл хранить их во внешнем файле JSON, а не в жестком кодировании в самом скрипте. Я могу прочитать JSON в массив, но, похоже, у меня проблема с областью видимости:

    var countries = {};
    $.getJSON("countrycodes.json", function(data) {
        for (let i in data) 
                countries[data[i].code] = data[i].longname;
        console.log(countries["MX"])     // logs "Mexico"
    });
    console.log(countries["MX"])         // Undefined

Мои коды стран. json выглядит так:

[
    {"code" : "US", "longname" : "United States"},
    {"code" : "CA", "longname" : "Canada"},
    {"code" : "MX", "longname" : "Mexico"},
    {"code" : "RU", "longname" : "Russia"}
]

Ответы [ 2 ]

0 голосов
/ 29 марта 2020

Итак, я думаю, единственное решение - сделать вызов синхронным? Я понимаю, что обычно это не рекомендуется, но я не слишком обеспокоен задержкой загрузки крошечного текстового файла размером 5 КБ с локального веб-сайта:

    var countries = {};
    $.ajax({ url: "countrycodes.json", async: false, dataType: 'json', 
         success: function(data) {
             for (let i in data) 
                     countries[data[i].code] = data[i].longname;
         }
    });
    console.log(countries["MX"])        // Logs "Mexico"
0 голосов
/ 29 марта 2020

Вы не можете получить доступ к данным вне вызова ajax, так как они асинхронные, они будут видны через некоторое время, и, следовательно, внешний файл console.log всегда будет печатать неопределенный.

...