如何从哈希表中存储和获取数据 - javascript

时间:2014-10-22 19:17:35

标签: javascript file-io hashmap

我无法在javascript上找到任何内容,但这可能会很快澄清。我正在一个网站上工作,我必须通过服务器的http请求检索数据。因为我需要发出几个请求并且数据是不变的,我想做的是使用键和值制作表 - >将这些值存储在文件中 - >然后能够检索这些值。这样我就必须读取一个文件,以便通过30个http请求获取数据

一般理念:

Given: spell id = number (Ex. 45)
Output: name of spell = string (Ex. fire...)

Use this output to then fetch the url of the image of the spell (containing the spell name)

修改

代码:

// When I fetch the file i use (json data)
    function getChampionImage(id) {
                    var champUrl = "https://na.api.pvp.net/api/lol/static-data/na/v1.2/champion/" +id +"/?api_key=....."
                    xmlHttp = new XMLHttpRequest();
                    xmlHttp.open( "GET", champUrl, false );
                    xmlHttp.send( null );
                    var jsonText = xmlHttp.responseText;
                    var champData = JSON.parse(jsonText);
                    var champName = champData.key;
                    return "http://ddragon.leagueoflegends.com/cdn/" + versionNum + "/img/champion/"+champName+".png";


                }

1 个答案:

答案 0 :(得分:0)

您需要做的就是将响应添加到对象上,输入键入。 这在同步IO中特别简单,因为您不必担心回调范围。

由于函数是JS中的对象,因此您可以将过程本身用作命名空间,因为您不需要外部变量,所以它可以很好地使用方法:

// When I fetch the file i use (json data)
    function getChampionImage(id) {
                    var cached=getChampionImage["_"+id];
                    if(cached) return cached;
                    var champUrl = "https://na.api.pvp.net/api/lol/static-data/na/v1.2/champion/" +id +"/?api_key=....."
                    xmlHttp = new XMLHttpRequest();
                    xmlHttp.open( "GET", champUrl, false );
                    xmlHttp.send( null );
                    var jsonText = xmlHttp.responseText;
                    var champData = JSON.parse(jsonText);
                    var champName = champData.key;
                    return getChampionImage["_"+id]="http://ddragon.leagueoflegends.com/cdn/" + versionNum + "/img/champion/"+champName+".png";

                }

编辑:要在页面访问之间保留url数据,请使用localStorage作为哈希对象:

function getChampionImage(id) {
                var cached=localStorage["_"+id];
                if(cached) return cached;
                var champUrl = "https://na.api.pvp.net/api/lol/static-data/na/v1.2/champion/" +id +"/?api_key=....."
                xmlHttp = new XMLHttpRequest();
                xmlHttp.open( "GET", champUrl, false );
                xmlHttp.send( null );
                var jsonText = xmlHttp.responseText;
                var champData = JSON.parse(jsonText);
                var champName = champData.key;
                return localStorage["_"+id]="http://ddragon.leagueoflegends.com/cdn/" + versionNum + "/img/champion/"+champName+".png";


            }

请注意,对于localStorage,如果进行更改,则必须自动使缓存过期。