首页 > 解决方案 > 获取可用于 JQuery/javascript 中所有范围的 JSON 数据

问题描述

使用 JQuery,我通过 json 调用加载一组邮政编码数据,该调用在文档加载时加载一次以填充选项选择。我可以在一个函数中做到这一点,这很好。

但是,每次用户在选择中选择不同的邮政编码时,都会触发代码(通过 .change),并且我需要再次加载(相当大的)相同的 json 数据以填充一些不同的字段。

因为第一次调用包含在回调函数中,所以数据永远不会超出该范围,并且不能再次重用。

如果有人更改项目 100 次,那就是加载数据的 100 次,这看起来既浪费又缓慢。

有什么方法可以调用该数据一次,并使其可用于全局/更广泛的范围,以便 .change 函数可以访问它?

编辑这是代码:

$(document).ready(function() {
  GetPostcodes();
  $("#postcodes").change(function() {
    console.log("Selection Changed to " + $(this).val());
  });
});

function GetPostcodes() {
  $.getJSON("population.json", function(cases) {
      var filtercases = $(cases).filter(function(i, n) {
      return n.POA_NAME16 >= "2450" && n.POA_NAME16 <= "2489"
    });

    var postcodes = [];
    $.each(filtercases, function(i, n) {
      postcodes.push(n);
    });
    postcodes = postcodes.unique();
    postcodes = postcodes.sort();

    var options = [];
      for (var i = 0; i < postcodes.length; i++) {
      options.push('<option value="',
        postcodes[i].POA_NAME16, '">',
        postcodes[i].POA_NAME16, '</option>');
    }
    $("#postcodes").html(options.join(''));

  });
}

这是 JSON 的样子:

 {
    "POA_NAME16": 2000,
    "Combined": "BARANGAROO,DARLING HARBOUR,,DAWES POINT,HAYMARKET,MILLERS POINT,PARLIAMENT HOUSE,SYDNEY,SYDNEY SOUTH,THE ROCKS",
    "Tot_p_p": 27411
  },
  {
    "POA_NAME16": 2006,
    "Combined": "THE UNIVERSITY OF SYDNEY",
    "Tot_p_p": 1259
  },

因此,虽然我只在第一次调用中使用邮政编码数据来填充下拉框,但我希望能够访问触发 .change 属性以显示其他信息的所有信息。

干杯

标签: javascriptjquery

解决方案


我认为问题来了,我试图这样做:

GetPostcodes();
console.log(the global variable I set)

这是行不通的。

但是,如果我在另一个事件之前不引用该全局变量,那么一切都在那里并且正在工作 - 所以虽然我已经有了答案 - 你的帮助促使我进一步研究。干杯:P


推荐阅读