2016-02-29 48 views
-1

想要构建以下的解决方案。如何解析没有Web请求或Web服务器的JSON文件?

$.getJSON('myfile.json', function (data) { 
    showAll(data); 
}); 

我想避免使用网络服务器,但只是想直接访问文件。

getJSON使用Web请求,其中介绍了错误:XMLHttpRequest cannot load file:///Users/me/Documents/project/myfile.json. Cross origin requests are only supported for protocol schemes: http, data, chrome, chrome-extension, https, chrome-extension-resource.

我想一个变通。我已经阅读了关于重命名为.js的事情,然后将其从HTML文件中链接起来。有任何想法吗?

+0

你应该真的使用一个Web服务器。 – SLaks

+0

您可能希望通过“直接”指定您的意思。有些用户正在她的电脑上浏览您的网站,即您的JavaScript正在她的电脑上运行。你想从该计算机的本地文件系统读取文件吗?或者,如果你想从服务器加载它,比通过​​HTTP加载它更直接? – meriton

回答

1

简单,速度快,但不利于真正的项目解决方案:

  1. 重命名myfile.json到​​(名称并不重要)。
  2. 创建data.js一个变量,并与你的JSON var myData = {...your json...}
  3. 初始化它添加到<script src="./data.js"></script> HTML文件。
  4. 现在你可以使用myData从javascript的变量与所有数据。

该解决方案不好,因为您在全局范围内添加了一个新变量,浏览器仍会发出http请求来获取此.js文件。

此外,如果您想对本地文件发出ajax请求,则可以使用http服务器。看看非常简单的节点js http-server

0

AJAX是关于制作异步HTTP请求。您需要一个Web服务器来发出这些请求并接收这些响应。 JQuery的.get()方法不会让你避开Web服务器。

我能想到的唯一方法是在代码中包含一个iframe,并将iframe的源设置为包含JSON的资源。然后,您可以对iframe的内容使用JSON.parse()。

+1

否; SOP也会阻止它。 – SLaks

0

如果您有权限正确,您可以使用<script>标签获取文件。

<script src="./favs.js"></script> 
<script src="./script.js"></script> 

favs.js

var favs = [ 
    { url: 'http://google.com' }, 
    { url: 'http://stackoverflow.com' } 
]; 

script.js

console.log(favs); // you can use favs as global variables 

否则,如果你想使用Ajax调用如$.getJSON(),你应该有

在HTML

莫名其妙的Web服务器。


此外,您可以动态加载js文件。你可以使用下面的代码例如:

function loadScript(path, onload) { 
    var script = document.createElement('script'); 
    script.type = 'text/javascript'; 
    script.src = path; 
    var s = document.getElementsByTagName('script')[0]; 
    s.parentNode.insertBefore(script, s); 
    if(onload) s.onload = onload; 
} 
2

这将是一个3步过程。

移动JSON文件放到一个文件夹,你的其他网页

在JSON文件,给obejct一个名称,即VAR数据= {...};

在你婉使用它的文件刚刚与<script src='myJSON.js'></script>

1

如果它是静态的JSON资源,为什么还要让另一个网络请求调用它。网络很贵。您可以更改为.js并将该文件包含在页面中。

+0

这就是我想要做的 – User