【问题标题】:Save Javascript Array For Use in Another File保存 Javascript 数组以在另一个文件中使用
【发布时间】:2014-07-23 21:24:25
【问题描述】:

编辑以尝试增加清晰度:

我有两个文件:number-crunching.js 和 chart.html。

number-crunching.js 有一个 JSON 对象:

var data = [
{
  "mother": "Ellen",
  "father": "Bob",
  "pet": "cat",
  "age":50,
  "hairLength":10
},

{
  "mother": "Sandra",
  "father": "Jeff",
  "pet": "dog",
  "age":18,
  "hairLength":2
}
];

然后它有一个 run 函数来处理该数据并返回一个多维数组,如下所示:

[
  ['mother', 'father', 'pet', 'age', 'hairLength'],
  ['Ellen', 'Bob', 'cat', 50, 10],
  ['Sandra, 'Jeff', 'dog', 18, 2]
]

创建此数组的所有内容都包含在一个名为 run 的函数中,该函数返回完成的数组。

在第二个文件chart.html(其中有一些JS)中,我包含了number-crunching.js 并调用run 函数并将该数组存储在chart.html 中。

var 已编辑数据 = run(); editedData 现在包含上面的数组。

然后,我在 html 页面上的图表中可视化editedData 的内容。

图表需要永远加载,因为它每次都在 run 函数中进行所有计算,这涉及多次循环遍历 JSON 对象,它是一个非常大的对象。所以页面加载需要很长时间。

我想要做的是分离这些文件。因此,我不想在chart.html 中调用run,而是只想将数组存储在chart.html 中。所以,我想运行一次数字运算并以某种方式保存数组,这样我就不必再进行任何数字运算了。

基本上,我只想使用数字运算和它的run 一次。也就是说,它应该将run 的结果保存在某处,以便我可以将数组复制到chart.html 文件中并将其用于我的Web 应用程序。

我该怎么做?感谢您的帮助,如果第一次不清楚,对不起。

【问题讨论】:

  • 如果这个问题是关于你写的代码,代码在哪里?
  • JSON.parse(/*jsons here*/)
  • 您是否已经尝试过JSON.stringify()JSON.parse()
  • 希望编辑后的描述更容易理解。非常感谢您的回复。
  • 我还是不明白。数组中的数据是静态的还是变化的?如果它不是动态的,为什么不将数组保存到 .js 文件并包含它呢? “它每次都在运行函数中进行所有计算”是什么意思。每次页面加载?

标签: javascript jquery html arrays json


【解决方案1】:

您需要查看HTML5's FileSystem

您需要创建一个文件并将您的数组以 JSON 格式推入其中。

Fiddle

window.requestFileSystem  = window.requestFileSystem || window.webkitRequestFileSystem;

function errorHandler(err) {
   console.log("Error happened");
   console.log(err);
}

var yourdata = [
  ['mother', 'father', 'pet', 'age', 'hairLength'],
  ['Ellen', 'Bob', 'cat', 50, 10],
  ['Sandra', 'Jeff', 'dog', 18, 2]
];

function onInitFs(fs) {

    fs.root.getFile('data.json', {create: true}, function(fileEntry) {
        fileEntry.createWriter(function(fileWriter) {
            fileWriter.onwriteend = function(e) {
console.log('Write completed.');
            };

            fileWriter.onerror = function(e) {
console.log('Write failed: ' + e);
            };

            var json = JSON.stringify(yourdata);
            console.log(json);
            var blob = new Blob([json], {type: "application/json"});
            fileWriter.write(blob);
        }, errorHandler);
    }, errorHandler);

}

window.webkitStorageInfo.requestQuota(PERSISTENT, 1024, function(grantedBytes) {
    // Is this a bug? This function is called instantly, i didn't even granted permission or anything. You need to refresh after granting permission.
    window.requestFileSystem(PERSISTENT, grantedBytes, onInitFs, errorHandler);
}, errorHandler);

【讨论】:

  • 这似乎是在正确的道路上。当我把它放进去时,我收到一个错误,上面写着 Uncaught TypeWrror: undefined is not a function。它显示在最后一行。你能帮我找出问题所在,以便我可以得到文件吗?它不会让我编辑帖子,因为它只更改了一个字符,但我将函数的声明更改为 errorHandler 以匹配函数调用。
  • 这就是我现在所拥有的:function errorHandler() { console.log("错误发生"); } 函数 onInitFs(fs) { var yourdata = run(); fs.root.getFile('datascotus.json', {create: true}, function(fileEntry) { fileEntry.createWriter(function(fileWriter) { var json = JSON.stringify(yourdata); var blob = new Blob([json ], {type: "application/json"}); fileWriter.write(blob); }, errorHandler); }, errorHandler); } window.requestFileSystem(window.TEMPORARY, 1024*1024, onInitFs, errorHandler);
  • @Roger 编辑了我的答案,从未使用过文件系统 api,很抱歉等待,我为您制作了一个示例代码(它有效,经过测试)。您可以在答案中或在这里找到小提琴:jsfiddle.net/4dup9
猜你喜欢
  • 2019-06-29
  • 1970-01-01
  • 1970-01-01
  • 2016-11-12
  • 2020-01-06
  • 2019-11-11
  • 2013-12-20
  • 1970-01-01
  • 2017-01-02
相关资源
最近更新 更多