我是JS的新手,我正在做一个小的html页面 - 现在 - 将在本地运行。我有一个JSON格式的字符串,我需要能够将其作为文件存储/加载到硬盘上。
为了能够存储字符串,我已经将它用于Firefox:
function saveJSON() {
var obj = {name:'John', max:100};
window.open( "data:text/json;charset=utf-8," + escape(JSON.stringify(obj)))
}
但是,它只适用于FF,我也需要能够使用Internet Explorer。我已经阅读了一些关于使用ActiveX的内容,但我还没有找到任何关于如何使用它的例子。
我应该尝试使用ActiveX,还是有更好的HTML / JS方法来保存适用于这两种浏览器的文件?
第二个问题是加载JSON文件。我发现一旦加载,我可以使用JSON.parse将其转换为JSON var。但我不知道如何加载选定的JSON文件。我有一个
<input type=file id="filePath">
获取文件路径(虽然它在两个浏览器中返回不同的东西),我希望能够做类似的事情
var a = loadFile(filePath.value)
有关如何操作的任何建议?我真的被困在这里,非常感谢任何帮助。
感谢。
答案 0 :(得分:6)
要加载文件,它必须已存在于服务器上。然后可以将其作为脚本的一部分加载(延迟加载或包含在头部中) - 或者使用jQuery AJAX库的.load()方法加载。如果它不在服务器上,您需要先进行上传[这是为了防止XSS]。
您可以使用.load(),. get()或完整的.ajax()jQuery调用从该点提取数据。看这里:http://api.jquery.com/load/
为了保存数据 - 使用cookie以这种方式存储数据,将数据发布到新窗口(表单提交),或者如果您仍然希望它在查询字符串中,则您的方法应该有效。
注意我使用不同的JSON库,但以下在IE和FF中执行。
$(document).ready(function() {
var obj = { name: 'John', max: 100 };
window.open("data:text/json;charset=utf-8," + escape($.toJSON(obj)))
})
我建议通过它,你会做类似的事情:
function saveJSON(){
var obj = {};
obj.name = 'John';
obj.max = 100;
$("#json").val($.toJSON(obj));
$("#hiddenForm").submit();
}
一个包含它的简单形式......
<form action="somepageToDisplayFormFields.php" target="_blank" id="hiddenForm">
<input type="hidden" name="json" id="json" />
</form>
这将允许您传递更多(和更复杂)的对象,而不会遇到URI大小限制和跨浏览器功能差异。再加上尝试解决escape(),escapeURIComponent()等问题......最终会让你疯狂。
答案 1 :(得分:2)
好吧,我找到a solution来阅读一个非常好用的客户端文件。它也不是完全不安全,因为“直接和有意的用户干预需要将单个文件暴露给脚本”。目前它仅适用于Firefox,所以我想我现在必须解决这个问题。
谢谢大家的意见和回答;他们非常乐于助人,我学到了很多东西。
答案 2 :(得分:1)
直接文件系统操作通常是客户端javascript不允许的(有充分的理由。你希望随机网站在你的文件中浏览?))
尽管如此,你可以或多或少地通过使你的JSON成为下载链接来实现你的第一个目标 - 将你的数据网址放入链接的href中,并且应该在IE中以IE8开始工作。对于旧的IE,你是SOL。至于从路径获取JSON文件,有一个PROPRIETARY,FIREFOX ONLY属性,允许您执行此操作。记录在此:https://developer.mozilla.org/en/DOM/File