使用JavaScript读取本地JSON文件(无需Web服务器)

7
看起来这个问题已经被问了很多次,但我想确保没有其他选择。
所以我需要做的是:
1. 从.net生成一个 .JSON 文件(容易) 2. 使用JavaScript读取本地JSON文件并生成一个带有有用图表等内容的HTML页面(使用Raphaeljs)。 3. 将结果(HTML +相关JavaScript)交付给客户端。
我不介意安装本地Apache来轻松读取JSON文件,但由于我不能要求客户这样做,因此我正在寻找一种在JavaScript中读取本地JSON文件(在文件系统上,没有Web服务器)的方法,以便我最终提供HTML、.js和.json文件,并让客户端看到相关的图表。
我已经阅读过 FileReader 类是一种选择,但我希望有灵活性,以支持IE浏览器(比如IE7到IE10)中的这些选项。
如果有任何关于如何解决这个问题的帮助,将不胜感激。

我不确定我完全理解了你的设置。生成JSON文件的.NET程序是在客户端机器上运行的GUI应用程序/服务吗?您将为用户启动浏览器,还是期望用户在预先存在的页面上选择文件? - jevakallio
你所说的“local”是指位于Web服务器上的文件还是用户端设备上的文件?如果文件位于服务器上,那么可以实现这个功能;但如果文件在客户端上,则无法实现。 - scunliffe
.NET生成包含我的数据的JSON文件。然后JavaScript应该读取JSON以生成图表等内容。我向客户端返回的是HTML(带有JavaScript和JSON),以便可视化我的数据(客户端不必提供任何数据或JSON)。您可以想象,HTML充当向客户端报告而不是演示文稿的角色。一切都是本地和静态的。 - theohar
3个回答

1

由于安全原因,Web浏览器无法读取文件系统中的文件。如果我理解正确,您在本地计算机上运行了一个.NET应用程序?

如果是这种情况,您可以托管WCF服务以从应用程序提供JSON。 WCF自托管在此MSDN页面上进行了描述。您应该能够从浏览器向在localhost上托管的应用程序内部的服务器发出AJAX请求。


0

如果你想支持旧版IE,你需要进入ActiveX安全设置地狱。看看var fso = new ActiveXObject("Scripting.FileSystemObject");

但是如果你要将内容和HTML文件传递给客户端,为什么不直接将JSON标记添加到HTML文档中呢?这似乎是最简单的解决方案。


“将JSON标记直接添加到HTML文档中”是什么意思? - theohar
<script>var myCode = { "foo" : "bar", "count" : 42 };</script> - epascarello

0

在浏览器中,您无法从本地磁盘读取文件(安全限制)。但是,一旦您要交付HTML + js和JSON(在zip中?),您可以像从常规Web服务器一样读取json。只需使用相对链接,如果JSON与HTML和JS位于同一文件夹中,则可以使用相对链接。或者,您可以将JSON作为交付给客户的HTML的一部分。

但是,如果您要在Web上显示页面(HTML和JS),最好要求客户上传其JSON文件,然后从服务器下载它(以AJAX方式)。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接