如何预加载JSON链接?

时间:2019-06-21 08:03:01

标签: javascript json preload

我有一个需要调用链接(JSON格式)的函数,事实是我希望能够预加载此链接,以使调用函数更流畅并减少操作时间。

onSelectionChanged: function (selectedItems) {
    selectedItems.selectedRowsData.forEach(function(data) {
        if(data) {
            colorMe(data.target)     
        }
    });
}

function colorMe(item){
    globalItem = item;
    request('http://blablabla/?format=json',findMaterial);
};  

function findMaterial(data){        
    jq310.each(data, function(table) {
        if (data[table].identifier == globalItem){
            globalData = data[table]
            request('http://another-blablabla/?format=json',findMatchArea);

        };
    });
};

function findMatchArea(areas){                      
    jq310.each(areas, function(area) {

        blablabla

我构建的请求函数只是查看链接是否已被调用,因此如果为true,则会重新加载它。并且还将数据从链接发送到被调用的函数。

2 个答案:

答案 0 :(得分:0)

如果您要加载静态json文件,则应考虑将其加载到文件顶部。为此,您应该将数据存储在这样的全局变量中:

let datas;

request('http://blablabla/?format=json', (data) => {
  datas = data
});

onSelectionChanged: function (selectedItems) {
  selectedItems.selectedRowsData.forEach(function(data) {
      if(data) {
        globalItem = data.target;
        findMaterial();
      }
  });
}

function colorMe(item){
  globalItem = item;
};  

function findMaterial(){    
  const data = datas;    
  jq310.each(data, function(table) {
      if (data[table].identifier == globalItem){
          globalData = data[table]
          request('http://another-blablabla/?format=json',findMatchArea);

      };
  });
};

答案 1 :(得分:-1)

我终于找到了一种正确执行此操作的方法,这里是:

var mylink = 'https://fr.wikipedia.org/wiki/JavaScript';

function preloadURL(link){
    var xhReq = new XMLHttpRequest();
    xhReq.open("GET", link, false);
    xhReq.send(null);
    var jsonObject = JSON.parse(xhReq.responseText);
    return jsonObject;
};

jsonObjectInv = preloadURL(mylink);

我只是指向我的json变量进行解析(速度更快)

function colorMe(item){
    globalItem = item;
    findMaterial(jsonObjectInv);
};  

问题解决了