2013-02-14 57 views
4

我正在开发一个小型的HTML5网络应用程序,用户可以使用它们的浏览器与跨平台脱机使用。他们将收到一个CD或USB棒上的wep应用程序,然后双击该HTML文件。 HTML文件然后从同一目录/子目录中本地加载CSS,JavaScript文件等等。使用JavaScript从本地HTML5网络应用程序加载JSON

到目前为止,一切都很好。但是我也想加载一个包含JSON的文件(也是本地的,来自同一个目录),并使用该数据构建DOM的一部分。

$.getJSON("playlistcontent.json", function (json) { 
     //use the data... 
    }); 

在这里,我遇到了著名的

地空没有被访问控制允许来源

允许误差。有很多关于这方面的资源,甚至相当于similar questions。但由于这是故意在本地,所提出的解决方案不起作用。

但是,由于AJAX是“异步”我可能会有更多的“同步”或更好的方法吗?那么JSONP呢?

注意:我知道我可以在禁用安全检查的情况下启动浏览器(尤其是Chrome),但这不是我的用户的选项。

+4

JSONP只是一个包含函数调用的JavaScript文件。那么,为什么不只是通过添加'var data ='来制作一个JavaScript文件,而只需将该文件包含为'script'。然后ex-JSON数据被解释为对象字面值,数据在全局变量data中可用。 – 2013-02-14 20:21:04

回答

1

我会用Felix Kling的方法与JSONP。环绕你的数据文件中的一个回调函数:

(function(data) { 
    // Do things with your data object here 
})(
    // Put your data object here as the argument to the callback 
); 

如果包括与标记这个脚本文件,回调函数会被自动执行。

1

我喜欢Felix Kling的方法,如果您只需要JSON数据,您可以通过设置JS变量并使用脚本标记加载JSON文件来加载数据。但是,如果这还不足以满足您的需求,则可以使用http://www.server2go-web.de/这样的解决方案,该解决方案将从CD运行Web服务器,从而绕过本地文件限制。

+0

这不符合我的跨平台要求,这正是我想首先将其作为Web应用程序来完成的原因。 – Marcel 2013-02-15 19:14:41

3

我回答了类似的问题here

您可以使用HTML5的文件API,其中包括一个FileReader,然后调用JSON.parse的结果。

+2

但是,您无法在没有用户交互的情况下自动读取文件。 – 2013-02-14 20:26:51

+1

的确如此。根据应用程序的用例,Marcel可能更喜欢不同的方法。 – 2013-02-14 20:28:54

+0

我不认为你可以从文件系统中读取文件。您只能从沙盒环境中打开文件,即您创建的文件。您只能使用文件输入或拖放操作从文件系统打开文件。 – 2013-02-15 05:11:04