使用D3.js。在使用d3.json('relation.json',function)方法时,浏览器报d3.v3.min.js:1 Access to XMLHttpRequest at 'file:///C:/Users/Administrator/Desktop/d3/relation.json' from origin 'null' has been blocked by CORS policy: Cross origin requests are only supported for protocol schemes: http, data, chrome, chrome-extension, https.我的json文件是本地的,请问如何解决。谢谢
这个问题是因为浏览器的安全策略所致。浏览器将该请求拦截并报错,是因为当前网页的域名和请求的文件域名不一样,浏览器不允许这种跨域请求。
解决方法是将 JSON 文件放到 HTTP 服务中,本地文件路径不能直接使用 file:///XXXX 这种方式获取。可以使用 HTTP 服务访问本地静态文件,具体方法如下:
首先我们需要安装 HTTP 服务器,可以使用一些开源的工具,如 Node.js、Nginx、Apache 等。这里我以 Node.js 为例进行讲解。
在命令行中输入以下命令启动 HTTP 服务器:
$ cd /path/to/root/dir/
$ npm install -g http-server
$ http-server
其中,/path/to/root/dir/
为文件所在目录的绝对路径,你也可以将该命令执行目录切换为文件根目录下,直接使用 http-server
启动。
执行后,会输出以下信息:
Starting up http-server, serving ./
Available on:
http://192.168.0.100:8080
http://127.0.0.1:8080
Hit CTRL-C to stop the server
可以看到,文件服务启动成功,现在可以通过 http://127.0.0.1:8080/relation.json 访问到 relation.json 文件。
在代码中修改 d3.json 操作的 URL 地址,改为 http://localhost:8080/relation.json 的形式(localhost 需要与启动 HTTP 服务器时输出的 IP 地址一致),即可读取到 json 文件。如下所示:
d3.json('http://localhost:8080/relation.json', function(data) {
// do something with the data
});
这样,就能够在本地使用 D3.js 访问 JSON 文件了。