【问题标题】:Accessing external file JSON data from beyond scope of $.getJSON从 $.getJSON 范围之外访问外部文件 JSON 数据
【发布时间】:2020-03-29 19:47:39
【问题描述】:

我必须将 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

我的 countrycodes.json 看起来像这样:

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

【问题讨论】:

    标签: javascript json ajax scope


    【解决方案1】:

    您无法访问 ajax 调用之外的数据,因为它是异步的,它会在一段时间内可见,因此外部的 console.log 将始终打印 undefined。

    【讨论】:

      【解决方案2】:

      所以我想唯一的解决方案是使调用同步?我知道这通常不会被推荐,但我不太担心从本地网站加载一个 5 KB 的小文本文件的延迟:

          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"
      

      【讨论】:

        猜你喜欢
        • 2014-01-21
        • 2016-06-23
        • 1970-01-01
        • 2012-09-15
        • 2018-11-09
        • 1970-01-01
        • 1970-01-01
        • 2015-04-06
        • 1970-01-01
        相关资源
        最近更新 更多